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 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/

相关文章:

java - 无法通过 Servlet 连接到 SQL Server,但可以在本地连接到它

php - get_result() 即使启用了 mysqlnd 也不起作用

mysql - 使用 UNION ALL 时如何简化此 MySQL 查询?

sql-server - 避免 SQL Server GROUP BY 中不必要的排序?

sql - 如何根据特定条件查找表中的下一个值

sql - 在 SQL 的 Exec 语句中使用单引号

c# - 在 4 个结果后插入字符串

mysql - 在加载到数据库或使用数据库之前规范化数据?

mysql - 下载 mysql 源代码的链接

php - 在 For 循环内爆