如何检索动态列?

时间:2013-06-27 04:14:46

标签: sql sql-server tsql

我有一张桌子

 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

我想将逗号分隔值作为参数传递给此Procedure.My问题是如何动态地检索表列?

2 个答案:

答案 0 :(得分:3)

尝试

CREATE PROCEDURE columnlist
(
  @COLUMNS VARCHAR(MAX)
)
AS
BEGIN
  DECLARE @sql VARCHAR(MAX)
  SET @sql = 'SELECT '+ @COLUMNS + ' FROM Table1'
  EXECUTE(@sql)
END

使用它

EXECUTE columnlist 'FirstName, LastName'

这是 SQLFIddle 演示

答案 1 :(得分:2)

试试这个 -

<强>查询

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')