Sql-Server

如果 T-SQL 變數已經存在,如何重新聲明它?

  • April 1, 2015

背景:

我正在建構一個要在伺服器上執行的 SQL 命令,該命令涉及大量訪問儲存過程和聲明用作其他儲存過程輸入的變數。這都是在客戶端使用 C# 生成的,並作為一個大包發送。我必須這樣做,因為 ping 時間很長,因為客戶端將位於非常偏遠的地方,連接不良,我不想發送很多包並開始積壓,因為響應時間很長。

目前不超過三個客戶端可以並行工作,或者他們開始建立積壓,因為大約 200 個儲存過程的一個事務的傳輸速度大約需要 35 秒。

題:

如果它已經存在,我如何聲明一個我現在不存在的變數?我可以在 C# 端使用字典,但這聽起來對我來說是錯誤的方法。我想要一個接受重新聲明該變數(如果它確實存在)的聲明。

您不能重新聲明變數,也不能測試它們是否已被聲明(至少我無法找到)。但是,無論如何你都不應該這樣做。如果您提前知道變數名稱,只需在流程開始時將它們全部聲明。然後,在整個腳本中使用它們。

例如:

--------------------------------
-- BEGIN script header
--------------------------------
DECLARE @SomeVariable1 INT,
       @SomeVariable2 VARCHAR(50),
       ....;
       SomeVariableN DATETIME;
--------------------------------
-- END script header
--------------------------------

然後添加 1 個或多個使用這些變數的腳本塊:

---- Script Block 1 ---
EXEC dbo.MyProc @InputParam = 1, @OutputParam = @SomeVariable1 OUTPUT;
-----------------------

---- Script Block 2 ---
EXEC dbo.AnotherProc @InputParam = @SomeVariable1;
-----------------------

---- Script Block 3 ---
SET @SomeVariable2 = NULL; -- reset value if you don't want to carry over prior value
..do something here...
-----------------------

引用自:https://dba.stackexchange.com/questions/96797