Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用变量设置存储过程sql server中的行名称_Sql Server - Fatal编程技术网

Sql server 如何使用变量设置存储过程sql server中的行名称

Sql server 如何使用变量设置存储过程sql server中的行名称,sql-server,Sql Server,我需要使用变量来设置名称行,但我有错误 谢谢您的帮助试试这个示例脚本,我已经在程序中使用了示例表,通过变量输入的值将是别名列名 CREATE PROCEDURE Usp_procedure (@var int) AS Begin DECLARE @Sql nvarchar(max) SET @Sql=' SELECT EmployementStatus AS '+ QUOTENAME(CAST(@var AS VARCHAr(10)))+' from [dbo].[EmployeeInfo]

我需要使用变量来设置名称行,但我有错误


谢谢您的帮助

试试这个示例脚本,我已经在程序中使用了示例表,通过变量输入的值将是别名列名

CREATE PROCEDURE Usp_procedure (@var int)
AS
Begin
DECLARE @Sql nvarchar(max)

SET @Sql='
SELECT EmployementStatus AS '+ QUOTENAME(CAST(@var AS VARCHAr(10)))+'
 from [dbo].[EmployeeInfo]'
 --Print @Sql
 EXEC (@Sql)

END


EXEC Usp_procedure @var=1
结果

1
-------
Intern
Jr. DBA 

您可以使用动态SQL实现这一点。像这样的

CREATE PROCEDURE dbo.MyProc
(
  @ColNm VARCHAR(20)
)
AS
BEGIN
  DECLARE @Qry VARCHAR(MAX)

  SELECT
      @Qry = 'SELECT '+@ColNm+' = Col_Name FROM YourTable'

   EXEC(@Qry)

END

您能告诉我们错误吗?您必须使用动态sql来实现这一点。为什么需要动态地允许命名列?这似乎是应该在表示层而不是数据库中执行的操作。@var在这里是int类型的。它本身不包含名称,而是参数的名称。如果出于任何奇怪的原因,您希望该列也被命名为@var,那么这是可能的:将其转义为[@var]。如果您需要实际的动态列名,请参阅Sean的备注。但是,如果你的列名实际上是数字,那么整个事情就有点不明智。
CREATE PROCEDURE dbo.MyProc
(
  @ColNm VARCHAR(20)
)
AS
BEGIN
  DECLARE @Qry VARCHAR(MAX)

  SELECT
      @Qry = 'SELECT '+@ColNm+' = Col_Name FROM YourTable'

   EXEC(@Qry)

END