我有一个 SQL Server 存储过程,我希望将表列名存储为变量。但我发现这很困难。
代码
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
最佳答案
按照建议使用动态 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
关于mysql - 将表列名存储为sql server中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47171574/