Back to Top


1398/03/26 - 00:15

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

گاهی لازم داریم نتایج پرس و جوی خود را به صورت تک سطری انتخاب کنیم و به طور مثال با کاما جدا سازی کنیم.

کلمات کلیدی

comma separatedsql server201720162014

ترکیب نتیجه 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,........