列名在存储过程中设置但不起作用

waq*_*qas 0 sql-server-2008

列名在存储过程中设置但不起作用.但是当我运行此脚本时,会出现空行.我这样做是为了运行这个脚本?

Create Procedure Test
()
AS
BEGIN
   Declare @columnName nvarchar(50);

   set @columnName ='StoreName';

   SELECT * 
   FROM testtable 
   WHERE @columnName = 'storemanager'
END
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 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
Run Code Online (Sandbox Code Playgroud)

QUOTENAME()将列包装进来[square brackets]并希望保护您免受SQL注入.你还应该阅读这些帖子: