Mysql 在sql server中将表列名存储为变量

Mysql 在sql server中将表列名存储为变量,mysql,sql-server,Mysql,Sql Server,我有一个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 w

我有一个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。 您可以在以下位置读取动态SQL的文档:

请记住始终使用
sp\u executesql
执行动态形成的查询,因为使用
EXEC(@query)
更安全

使用上述方法,您的存储过程现在看起来如下所示

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

按照建议使用动态SQL。在您的情况下,可以使用以下T-SQL。 您可以在以下位置读取动态SQL的文档:

请记住始终使用
sp\u executesql
执行动态形成的查询,因为使用
EXEC(@query)
更安全

使用上述方法,您的存储过程现在看起来如下所示

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

为此,可以使用
sp_executesql
命令。您可以阅读本文,对动态SQL进行一次很好的回顾

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

为此,可以使用
sp_executesql
命令。您可以阅读本文,对动态SQL进行一次很好的回顾

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


动态TSQL…………许多人提出了类似的问题times@MitchWheat你能添加一个到上一个问题的链接吗?你做一个搜索怎么样?……动态TSQL…………类似的问题问了很多times@MitchWheat你能添加一个到上一个问题的链接吗?你做一个搜索怎么样?…当我输入列名时,我得到了无效的列NCan,你能共享吗请填写强制休假表,执行该过程时,您给出的参数r是什么?GetLeaveDays'moustical',1。Getleavedays是存储过程的名称,我的第一个参数和第二个参数我刚刚发布了我提交的答案的最后一行。我已经编辑了我的答案。你能试试我更新的SQL吗?当我输入列名时,我得到了无效的列NCan you share please table CompullsoryLeave,你在执行过程时给出的参数是什么?GetLeaveDays'Moustical',1。Getleavedays是存储过程的名称,我的第一个参数和第二个参数我刚刚发布了我提交的答案的最后一行。我已经编辑了我的答案。你能试试我更新的SQL吗?当我输入列名时,我得到了无效的列N你为列名输入了什么?现在试试存储过程,因为我对它做了一个小的更改。
@LeaveType
参数被定义为
varchar
,而它本应使用其最大长度进行定义,如
varchar(5000)
。您保存了我的一天。谢谢当我输入列名时,我得到了无效的列n您为列名输入了什么?现在请尝试存储过程,因为我对它做了一个小的更改。
@LeaveType
参数被定义为
varchar
,而它本应使用其最大长度进行定义,如
varchar(5000)
。您保存了我的一天。谢谢