2013-06-27 5 views
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 

я хочу, чтобы принять конкретные столбцы dynamically.i я с помощью следующей процедуры, но я могу взять только один столбец за один раз ..

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

    END 

я хочу передать comma разделяет значения как параметр к этой процедуре. Мой вопрос: Как динамически извлекать столбцы таблицы?

+1

Ваш вопрос не имеет смысла. Что вы передаете в хранимую процедуру? –

+0

В чем вопрос? Что не работает? Есть ли сообщение об ошибке? –

+0

Мой вопрос заключается в том, как извлекать столбцы таблицы динамически sql с помощью хранимой процедуры? Заранее спасибо – user2514925

ответ

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 демо

+0

Огромное вам спасибо за то, что response.it работает отлично. – user2514925

+0

Вы посмотрели демоверсию sqlfiddle, которую я предоставил? Что не работает? Отправьте код, как вы называете эту процедуру. – peterm

+1

+1 - за хороший ответ. – Devart

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