TSQL Передает многозначный параметр служб Reporting Services в динамический SQL

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

Вопрос

Дубликат: Манипуляция строкой TSQL varchar

Я создаю динамическую инструкцию SQL на основе параметров из отчета служб reporting services.Службы Reporting services передают параметры MutiValue в базовом формате CSV.Например, список состояний может быть представлен следующим образом:Ал, Калифорния, Нью-Йорк, Теннесси, Вирджиния

В инструкции 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

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

УСТАНОВИТЬ @StateList = ЗАМЕНИТЬ(@StateList, ',', "',"')

Затем заключите края в кавычки:

УСТАНОВИТЕ @WhereClause1 = @WhereClause1 + 'И customerState В ("' + @StateList + "') '

Другие советы

REPLACE по какой-то причине не сработал у меня при использовании с IN.В итоге я использовал ХАРИНДЕКС

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top