在存储过程中设置的列名但不起作用。但是当我运行此脚本时,会出现空行。我这样做是为了运行这个脚本吗?
Create Procedure Test
()
AS
BEGIN
Declare @columnName nvarchar(50);
set @columnName ='StoreName';
SELECT *
FROM testtable
WHERE @columnName = 'storemanager'
END
答案 0 :(得分:5)
您需要使用动态SQL,因为您无法使用变量引用列--T-SQL只是不按该顺序解析事物。尝试类似:
CREATE PROCEDURE dbo.Test
@columnName NVARCHAR(50),
@value NVARCHAR(4000)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT * FROM dbo.testtable WHERE '
+ QUOTENAME(@columnName) + ' = @value;';
EXEC sp_executesql @sql, N'@value NVARCHAR(4000)', @value;
END
GO
QUOTENAME()
将列包装在[square brackets]
中,希望能够保护您免受SQL注入。您还应该阅读这些帖子: