TSQL Передача параметра многозначных служб отчетов в динамический SQL - PullRequest
0 голосов
/ 03 апреля 2009

Дубликат : TSQL манипулирование строк varchar

Я строю динамический оператор SQL из параметров из отчета служб отчетов. Службы отчетности передают параметры MutiValue в базовом формате CSV. Например, список состояний может быть представлен следующим образом: AL, CA, NY, 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 ]

2 голосов
/ 30 июня 2010

REPLACE не работает для меня при использовании с IN по некоторым причинам. Я использовал CHARINDEX

WHERE CHARINDEX( ',' + customerState + ',', ',' + @StateList + ',' ) > 0
2 голосов
/ 24 января 2015

Для любого, кто пытается использовать Dynamic 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 - это место, где включается фильтр, поэтому, если есть большой объем данных - это, вероятно, не так отличный. Но ... Я расстроился, пытаясь заставить REPLACE работать или какие-либо другие решения, опубликованные другими.

1 голос
/ 03 апреля 2009

Это заботится о середине:

SET @StateList = REPLACE (@StateList, ',', '' ',' '')

Затем процитируйте края:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...