2016-05-21 6 views
0

Я хотел бы передать значения nvarchar в uniqueidentifier.Ошибка конверсии при преобразовании из символьной строки в uniqueidentifier Ошибка?

Например .:

Declare @test nvarchar(max); 
set @test = '''' + '77494371-30c1-4d2e-8dea-58dbefb325cc' + '''' --+ ',' + '''' + 'cb4229a2-76f8-4d68-aef7-f0bae089b382' + ''''; 
print @test; 

Select * from Table1 where ID in (@test); 

Я попытался пройти выше условия. На этот раз я столкнулся ниже ошибок:

'77494371-30c1-4d2e-8dea-58dbefb325cc','cb4229a2-76f8-4d68-aef7-f0bae089b382' 
Msg 8169, Level 16, State 2, Line 5 
Conversion failed when converting from a character string to uniqueidentifier. 

Если какой-либо способ передать несколько значений UniqueIdentifier в Where In состояния.

Пожалуйста, помогите мне решить эту проблему.

+0

Вы не можете использовать строку переменной, содержащей как ' 'X', 'Y', 'Z' 'в позиции in и подумайте, что он получит 3 значения. Он попытается найти одно значение: «X», «Y», «Z''». Вы должны либо создать динамический SQL, либо использовать некоторую структуру таблиц, такую ​​как переменная таблицы. –

ответ

1

В настоящее время вы запрашиваете будет разобрано как

Select * 
from Table1 
where ID in ('''77494371-30c1-4d2e-8dea-58dbefb325cc','cb4229a2-76f8-4d68-aef7-f0bae089b382''') 

Где ваш вход '''77494371-30c1-4d2e-8dea-58dbefb325cc','cb4229a2-76f8-4d68-aef7-f0bae089b382''' определенно не Unique Identifier поэтому вы получаете эту ошибку

Я предлагаю вам пойти с ниже подход

Declare @guid_col table(guid_col uniqueidentifier); 

insert into @guid_col 
values('77494371-30c1-4d2e-8dea-58dbefb325cc'), 
     ('cb4229a2-76f8-4d68-aef7-f0bae089b382') 

Select * from Table1 where ID in(select guid_col from @guid_col) 

или вам нужна сплит-строка функция, в которой вы нуждаетесь для разделения значений, разделенных запятыми, в переменной @test и использовать его в пункте Where. Для информации о расщепленной функции строкового проверить ссылку ниже

Split strings the right way – or the next best way

1

Попробуйте это ...

Declare @test nvarchar(max), @xml XML; 
set @test = '77494371-30c1-4d2e-8dea-58dbefb325cc,cb4229a2-76f8-4d68-aef7-f0bae089b382'; 

set @xml = N'<root><r>' + replace(@test,',','</r><r>') + '</r></root>' 


Select * from Table1 
where ID in (select r.value('.','varchar(max)') as item 
       from @xml.nodes('//root/r') as records(r) 
      ); 
Смежные вопросы

 Смежные вопросы