TSQL يمر معلمة خدمات التقارير متعددة الشركات في SQL الديناميكي

StackOverflow https://stackoverflow.com/questions/712430

سؤال

نسخة مكررة: tsql varchar سلسلة التلاعب

أنا أقوم ببناء بيان SQL ديناميكي من المعلمات من تقرير خدمات التقارير. تقوم خدمات الإبلاغ بتمرير معلمات Mutivalue بتنسيق CSV الأساسي. على سبيل المثال، قد يتم تمثيل قائمة الدول على النحو التالي: Al، CA، نيويورك، TN، VA

في بيان SQL هذا على ما يرام:

WHERE customerState In (@StateList) 

ومع ذلك، فإن البديل الديناميكي ليس موافق:

SET @WhereClause1 = @WhereClause1 + 'AND customerState IN (' + @StateList + ') '

هذا لأنه يترجم إلى (SQL غير صالح):

AND customerState IN (AL,CA,NY,TN,VA)

لمعالجة ذلك يحتاج إلى شيء مثل هذا:

AND customerState IN ('AL','CA','NY','TN','VA')

هل هناك بعض التعبير البارد الذي يمكنني استخدامه لإدراج علامات الاقتباس الفردية في SQL الديناميكية؟

هل كانت مفيدة؟

المحلول 3

هذا يعتني الوسط:

set @ statelist = استبدال (statatelist، "،"، "، '')

ثم اقتبس الحواف:

قم بتعيين @ whereclause1 = @ whereclause1 + "ولم توضيح في ('' + @ statelist + '' ')'

نصائح أخرى

استبدال لم يعمل بالنسبة لي عند استخدامها مع بعض الأسباب. انتهى بي الأمر باستخدام charindex.

WHERE CHARINDEX( ',' + customerState + ',', ',' + @StateList + ',' ) > 0

لأي شخص يحاول استخدام SQL الديناميكي مع معلمة متعددة القيمة في جملة WHERE واستخدامها لتشغيل تقرير SSRS، فهذه هي الطريقة التي حصلت عليها حولها ...

create table #temp
(id, FName varchar(100), LName varchar(100))

declare @sqlQuery (nvarchar(max))
set @sqlQuery =
'insert into #temp
select 
id, 
FName, 
LName 
from dbo.table'
exec (@sqlQuery)

select 
FName, LName
from #temp
where #temp.id in (@id) -- @id being an SSRS parameter!

drop table #temp

منحت، المشكلة مع هذا الاستعلام هو أن SQL الديناميكي ستحدد كل شيء من dbo.table، ثم حدد من #temp حيث ينطلق المرشح، لذلك إذا كان هناك كمية كبيرة من البيانات - ربما لم يكن رائعا للغاية. ولكن ... لقد شعرت بالإحباط في محاولة للاستبدال للعمل، أو أي حلول أخرى قد سجل آخرون.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top