我只是想知道是否可以在存储过程中使用变量。例如:如何在存储过程中使用变量
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