我只是想知道是否可以在存儲過程中使用變量。例如:如何在存儲過程中使用變量
CASE @productType
WHEN 1 THEN
DECLARE @table = ‘products1’
WHEN 2 THEN
DECLARE @table = ‘products2’
END
SELECT * FROM @table;
顯然這不起作用,只是想知道是否有辦法做到這一點。
我只是想知道是否可以在存儲過程中使用變量。例如:如何在存儲過程中使用變量
CASE @productType
WHEN 1 THEN
DECLARE @table = ‘products1’
WHEN 2 THEN
DECLARE @table = ‘products2’
END
SELECT * FROM @table;
顯然這不起作用,只是想知道是否有辦法做到這一點。
是的,有一種方法。你可以使用動態sql。
DECLARE @productType INT = 1
DECLARE @table NVARCHAR(MAX)
DECLARE @sql NVARCHAR(MAX)
SELECT @table =
CASE @productType
WHEN 1 THEN 'products1'
WHEN 2 THEN 'products2'
END
SELECT @sql = 'SELECT * FROM ' + QUOTENAME(@table);
EXEC(@sql)
你可以簡單地使用,如果其他if語句:
DECLARE @productType INT = 2
IF @productType = 1
SELECT * FROM products1
ELSE IF @productType = 2
SELECT * FROM products2
或使用sp_executesql
:
DECLARE @productType INT = 1;
DECLARE @table NVARCHAR(MAX);
DECLARE @sql NVARCHAR(MAX);
SELECT @table =
CASE @productType
WHEN 1 THEN 'products1'
WHEN 2 THEN 'products2'
END;
SELECT @sql = 'SELECT * FROM ' + QUOTENAME(@table);
EXEC sp_executesql @sql;
是的,這是一個簡單的例子,但我想在更復雜的過程中使用這種方法,因爲使用這種方法會很不方便 – user3839756
您能否提供您的方案的解釋,大部分時間最好避免動態SQL – Thomas
我看到這是出於性能原因嗎?該場景基本上是因爲我有一個非常長的聲明,其中表名必須在整個過程中進行更改。有很多情況下,所以我將不得不有20+如果語句和複製粘貼很多代碼 – user3839756
正是我一直在尋找的感謝。 – user3839756