将表列名称存储为sql server中的变量

时间:2017-11-08 04:24:50

标签: mysql sql-server

我有一个sql server存储过程,我希望将表列名存储为变量。但我发现它很难。

CODE

ALTER PROCEDURE [dbo].[GetLeaveDays] 
-- Add the parameters for the stored procedure here
 @LeaveType varchar,@AdminId int
 AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT @LeaveType  FROM CompulsoryLeave WHERE AdminId =@AdminId
END

@Leavetype是表列的名称。

修改 这就是我执行存储过程的方式

GetLeaveDays 'Maternity',1

2 个答案:

答案 0 :(得分:1)

按建议使用动态SQL。在您的情况下,您可以使用以下T-SQL。 您可以在Dynamic SQL in SQL Server

阅读动态SQL的文档

请注意,始终使用sp_executesql来执行动态构建的查询,因为使用EXEC (@query)会更安全。

DECLARE @queryString nvarchar(MAX);


SET @queryString = 'SELECT ' + @LeaveType + ' WHERE AdminId = @AdminId';

EXECUTE sp_executesql @queryString,
        N'@AdminId int',
         @AdminId = @AdminId;

使用上述方法,您的存储过程现在将如下所示。

ALTER PROCEDURE [dbo].[GetLeaveDays] -- Add the parameters for the stored procedure here
 @LeaveType varchar(5000), 
  @AdminId int 
 AS 
BEGIN

SET NOCOUNT ON;

DECLARE @queryString nvarchar(MAX);


SET @queryString = 'SELECT ' + @LeaveType + 'FROM CompulsoryLeave WHERE AdminId = @AdminId';

EXECUTE sp_executesql @queryString,
        N'@AdminId int',
         @AdminId = @AdminId;

END

答案 1 :(得分:1)

您可以使用sp_executesql命令来实现此目的。您可以阅读此Article以获得有关动态SQL的好评。

DECLARE @sqlCommand nvarchar(max);
SET @sqlCommand = 'SELECT ' + @LeaveType + ' FROM CompulsoryLeave WHERE AdminId = '''+@AdminId+''''
EXECUTE sp_executesql @sqlCommand, N'@AdminId int', @AdminId = @AdminId;