Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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,我有一张桌子 EmpId FirstName LastName Domain Vertical Account City ---------------------------------------------------------------------------------- 345 Priya Palanisamy DotNet LS Abbott Chennai 346 Kavitha Amirth

我有一张桌子

 EmpId  FirstName       LastName     Domain Vertical    Account City
 ----------------------------------------------------------------------------------
 345    Priya            Palanisamy DotNet  LS  Abbott  Chennai
 346    Kavitha     Amirtharaj DotNet   CG  Diageo  Chennai
 647       Kala          Haribabu     DotNet    IME IMS Chennai
我希望动态获取特定列。我使用以下过程,但一次只能获取一列

    create PROC columnlist
    (
    @COLUMNS VARCHAR(1000)
    )
    AS
    BEGIN
    DECLARE @sql nvarchar(max) = 'SELECT '+ @COLUMNS + ' FROM Table';
    exec sp_executesql @sql,N''

    END
我想将逗号分隔的值作为参数传递给此过程。我的问题是如何动态检索表列?

试试这个-

查询

ALTER FUNCTION dbo.udf_GetTableColumns
(
    @Table NVARCHAR(100)
)
RETURNS DATETIME
AS
BEGIN

    DECLARE @cols NVARCHAR(MAX)

     SELECT @cols = STUFF((
          SELECT ', [' + c.name + ']' 
          FROM sys.columns c WITH(NOWAIT)
          WHERE c.[object_id] = OBJECT_ID(@Table)
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')

     RETURN @cols

END
Exec

SELECT dbo.udf_GetTableColumns('dbo.Table')
试试这个-

查询

ALTER FUNCTION dbo.udf_GetTableColumns
(
    @Table NVARCHAR(100)
)
RETURNS DATETIME
AS
BEGIN

    DECLARE @cols NVARCHAR(MAX)

     SELECT @cols = STUFF((
          SELECT ', [' + c.name + ']' 
          FROM sys.columns c WITH(NOWAIT)
          WHERE c.[object_id] = OBJECT_ID(@Table)
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')

     RETURN @cols

END
Exec

SELECT dbo.udf_GetTableColumns('dbo.Table')
试一试

使用它

EXECUTE columnlist 'FirstName, LastName'
这里是演示

试试看

使用它

EXECUTE columnlist 'FirstName, LastName'

这里是演示

你的问题毫无意义。向存储过程传递什么?问题是什么?什么不起作用?是否有错误消息?我的问题是如何使用sql存储过程动态检索表列?您的意思是要选择n个列。传递逗号分隔的列名时,您面临的问题是什么?无论你面临什么问题,它都应该有效。你的问题毫无意义。向存储过程传递什么?问题是什么?什么不起作用?是否有错误消息?我的问题是如何使用sql存储过程动态检索表列?您的意思是要选择n个列。传递逗号分隔的列名时,您面临的问题是什么?无论您遇到什么问题,它都应该可以工作。非常感谢您的回复。它现在工作得很好。您看过我提供的sqlfiddle演示吗?什么不起作用?把你如何调用这个过程的代码贴出来。+1-这是一个很好的答案。非常感谢你的回复。它现在运行得很好。你看过我提供的sqlfiddle演示吗?什么不起作用?将您如何调用过程的代码张贴出来。+1-表示正确答案。