ترکیب نتیجه select در sql server 2017 و نسخه های قدیمی تر

ترکیب نتیجه select در sql server 2017 و نسخه های قدیمی تر

فرض کنیم می خواهیم نام کل ستون های جدولی را در دیتابیس انتخاب کنیم و از آن استفاده کنیم.

به این منظور ابتدا شناسه جدول را مشخص میکنیم تا از طریق آن بتوانیم نام ستون ها را انتخاب کنیم.

select object_id from sys.tables where name ='flow'

برای مشاهده نسخه Sql Server خود از دستور زیر استفاده کنید:

select @@VERSION

اگر در sql server 2017 هستید کار بسیار راحت شده است چون دستوری به نام STRING_AGG وجود دارد که به راحتی خروجی پرس و جو را ادغام می کند.

SELECT STRING_AGG (name, ',') AS csv 
FROM sys.columns; 

اما اگر از نسخه های قدیمی تر استفاده می کنید با اجرای دستور فوق خطای زیر را دریافت می کنید که می گوید این تابع به صورت پیش فرض موجود نیست.

'STRING_AGG' is not a recognized built-in function name.

لذا برای گرفتن خروجی دستور زیر را وارد می کنیم:

DECLARE @List NVARCHAR(MAX) = ''
    SELECT @List=@List+',' + name
    FROM sys.columns QT
    WHERE object_id=1952062040
SELECT @list=Stuff(@list, 1, 1, '')
select @list

خروجی دستور فوق به صورت زیر خواهد بود:

Id,DocumentId,DocumentStatusId,RowNo,........