GUID和字符串比较的问题,高手进!! 我把这个问题做了简化:
1.先看一段代码
select fchrdepartmentid from vw_U8DRP_StockReturnList where fchrDepartmentID in
( ('EA6B0395-7C2A-458F-91B1-3430DB937050') )
能正常查出数据。其中,fchrDepartmentID 为GUID型。
2.把1中的红色部分换成一个函数(实际上在第1步中我是把函数查出的结果用来测试的),如下所示:
select fchrdepartmentid from vw_U8DRP_StockReturnList where fchrDepartmentID in
( REPLACE(REPLACE(REPLACE('( ''{EA6B0395-7C2A-458F-91B1-3430DB937050}'')','''''''',''''''),'{',''),'}','') )
其中,红色部分的结果就是第1步中的红色部分。这段代码查询报错,错误信息:
将字符串转换为 uniqueidentifier 时失败。
3. 考虑到可能是字符串的问题,我在第3步中对fchrDepartmentID 做了转化,代码如下:
select fchrdepartmentid from vw_U8DRP_StockReturnList where CAST(fchrDepartmentID as nvarchar(50)) in (REPLACE(REPLACE(REPLACE('( ''{EA6B0395-7C2A-458F-91B1-3430DB937050}'')','''''''',''''''),'{',''),'}',''))
令人诧异的是,本次查询结果为空!
declare @i uniqueidentifier
set @i=newid()
select @i+'1' --这样会报错的。
declare @j uniqueidentifier
set @j=newid()
select ltrim(@j)+'1' --这样是可以的。
select cast(@j as varchar(40))+'1' --这样是可以的。
select convert(varchar(40),@j)+'1' --这样也是可以的。
------其他解决方案--------------------
declare @sql varchar(8000)
set @sql = 'select fchrdepartmentid from vw_U8DRP_StockReturnList where fchrDepartmentID in ('+ REPLACE(REPLACE(REPLACE('( ''{EA6B0395-7C2A-458F-91B1-3430DB937050}'')','''''''',''''''),'{',''),'}','') +')'
exec(@sql)
------其他解决方案--------------------
declare @j uniqueidentifier
set @j='8880E33B-DE1F-4A1A-AF0C-84611A173E80'
select fchrdepartmentid from vw_U8DRP_StockReturnList where fchrDepartmentID in
( substring('( ''{EA6B0395-7C2A-458F-91B1-3430DB937050}'')', charindex('{','( ''{EA6B0395-7C2A-458F-91B1-3430DB937050}'')')+1, 36) )