0

我有一张桌子

 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

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

4

2 回答 2

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演示

于 2013-06-27T04:48:23.977 回答
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

执行

SELECT dbo.udf_GetTableColumns('dbo.Table')
于 2013-06-27T04:48:15.703 回答