Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 执行后将存储过程重命名为多列_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 执行后将存储过程重命名为多列

Sql 执行后将存储过程重命名为多列,sql,sql-server,tsql,Sql,Sql Server,Tsql,执行我的存储过程后,将返回以下列: 斯诺 名字 日子 数量 bkt1 bkt2 但我想将这些列名更改为: 斯诺 名字 日子 数量 col_name_用户的i/p_ col_name_用户的i/p_ 您能提供帮助吗?在动态sql中使用列别名,如下所示: declare @q nvarchar(max) set @q ='select bkt1 as ' + @ipfromuser +' from table1' exec(@q) 因为您没有提到版本,所以我假设您有SQL Server

执行我的存储过程后,将返回以下列:

  • 斯诺
  • 名字
  • 日子
  • 数量
  • bkt1
  • bkt2
但我想将这些列名更改为:

  • 斯诺
  • 名字
  • 日子
  • 数量
  • col_name_用户的i/p_
  • col_name_用户的i/p_

您能提供帮助吗?

在动态sql中使用列别名,如下所示:

declare @q nvarchar(max)
set @q ='select bkt1 as ' + @ipfromuser  +' from table1'
exec(@q)

因为您没有提到版本,所以我假设您有SQL Server 2012+版本。您可以使用属性更改输出列名

示例

CREATE PROCEDURE SP_Test
    AS
BEGIN
   SELECT 1 AS 'ColA', 2 AS 'ColB'
END
现在,您可以使用带有结果集的属性来更改列名

 EXEC SP_Test 

EXEC SP_Test WITH RESULT SETS( 
(New_Col1 INT,
NEW_Col2 INT))
如果您使用的是较旧版本的SQL Server,则可以将存储过程结果集转储到临时表或表变量中,然后可以使用别名(与上述示例相同)


为执行sp后从用户处提供的sp和column名称查找解决方案更改列名,而不是在执行sp后更改列名在存储过程内的select查询中使用别名,如我的回答中所述,但我的列名是从用户处提供的,因此当写入为@ipfromuser时,请给出错误使用动态sql,然后如回答中所示明白你到底需要什么吗?显示您的sp结果以及您的预期结果!
DECLARE @Mytest TABLE (New_Col1 INT, New_Col2 INT)

INSERT INTO @Mytest EXEC Sp_Test
SELECT * FROM @Mytest