我有一个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
答案 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;