ranio Ответов: 2

Как передать значения, разделенные запятыми в SQL?


Я хочу передать значения, разделенные запятыми, в переменную параметра в sql server.

В настоящее время получение значений как

при тесте='АБ','Н','компакт'. Но при передаче этого параметра переменную в пункт, где условие не работает.

Что я уже пробовал:

  declare
 @ChannelTypeXml xml,
 @TransactionTypeXml xml
 
 
 SET @ChannelTypeXml='<ROOT><CHANNELTYPE><CHANNEL>FGBO</CHANNEL></CHANNELTYPE>
 <CHANNELTYPE><CHANNEL>IB</CHANNEL></CHANNELTYPE>
 <CHANNELTYPE><CHANNEL>Manual Upload - FGB</CHANNEL></CHANNELTYPE></ROOT>'
 
 
 --select @TransactionTypeXml = FileType                                                                    
 --from   USERS                                                                                                         
 --where
 --UserId= 'bm'
 --and
 --Role='BM'                                                                                      
 --AND  IsDeleted=0  
 
 
 select @ChannelTypeXml
 
declare @ChannelTypeValues varchar(4000)
select @ChannelTypeValues = ''
 
SELECT @ChannelTypeValues = @ChannelTypeValues +  ''''+ t.c.value('CHANNEL[1]','varchar(100)') +'''' + ','
FROM   @ChannelTypeXml.nodes('//ROOT/CHANNELTYPE') T(c)
 
select @ChannelTypeValues = substring(@ChannelTypeValues,1,len(@ChannelTypeValues)-1)
 
select @ChannelTypeValues

Bryian Tan

Где в коде используется предложение IN?

2 Ответов

Рейтинг:
1

Bryian Tan

Хорошо. Это мое предположение, основанное на том, что было опубликовано здесь. Текущий запрос возвращает @ChannelTypeValues = 'FGBO','IB','ручная загрузка - FGB'? И следующий невидимый/секретный запрос будет использовать эту переменную в качестве фильтра? [SELECT * FROM SECRETTable WHERE secretColumn IN @ChannelTypeValues ]???

Вот как запрос может выполнить описанный выше сценарий.

DECLARE @ChannelTypeXml xml

DECLARE @tempChannelType TABLE (ChannelType VARCHAR(50))
DECLARE @tempDummy TABLE (Column1 VARCHAR(50), ChannelType VARCHAR(50))

 SET @ChannelTypeXml='<ROOT><CHANNELTYPE><CHANNEL>FGBO</CHANNEL></CHANNELTYPE>
 <CHANNELTYPE><CHANNEL>IB</CHANNEL></CHANNELTYPE>
 <CHANNELTYPE><CHANNEL>Manual Upload - FGB</CHANNEL></CHANNELTYPE></ROOT>'

 --dummy table
INSERT INTO @tempDummy
	SELECT 'abcd','FGBO' UNION
	SELECT 'xyz','IB' UNION
	SELECT 'Kitty','CAT' UNION
	SELECT 'hijk','Manual Upload - FGB' UNION
	SELECT 'Woof Woof','DOG';

--get the channel 
INSERT INTO @tempChannelType
	SELECT t.c.value('CHANNEL[1]','varchar(100)') 
	FROM   @ChannelTypeXml.nodes('//ROOT/CHANNELTYPE') T(c)

SELECT * FROM @tempChannelType
SELECT * FROM @tempDummy WHERE ChannelType IN (SELECT * FROM @tempChannelType)

Поместите значение channelvalue, извлеченное из XML, во временную таблицу
ChannelType
FGBO
IB
Manual Upload - FGB

Применить результаты фильтра
Column1	ChannelType
abcd	FGBO
hijk	Manual Upload - FGB
xyz	    IB