tsql "in" 不是 return 任何东西
tsql "in" not return anything
我有这个查询:
declare @docId as varchar(36)
declare @totalId AS VARCHAR(500)
declare @C5 as int
declare @bool as bit
set @bool =1
set @docId='fba18752-1a70-4413-bc3f-9390eaf8a7ef'
set @totalId='''95B3F02C-8EBD-402E-9721-268A02830678'''+','+'''0211CFA9-1957-4C46-A6BE-16F7B5D8C50F'''
print @totalId
SELECT @C5=COUNT(*) FROM tblSend WHERE senDocId= @docId AND senReceiverDepartmentId IN (@totalId) AND senStatus in (3110,3125,3121) AND senReadDocument IN (0,2)
并出现以下错误:
Msg 8169, Level 16, State 2, Line 15
Conversion failed when converting from a character string to uniqueidentifier.
但是当我把@totalId 值而不是它的变量时,它 return 像这样:
SELECT @C5=COUNT(*) FROM tblSend WHERE senDocId= @docId AND senReceiverDepartmentId IN ('95B3F02C-8EBD-402E-9721-268A02830678','0211CFA9-1957-4C46-A6BE-16F7B5D8C50F') AND senStatus in (3110,3125,3121) AND senReadDocument IN (0,2)
为什么?
因为 IN
期望单个或逗号分隔值与列值匹配。您在 IN
中证明的值是 'SomeX,SomeY'
。 SQL 服务器正在尝试在 senReceiverDepartmentId
中查找 'SomeX,SomeY'
值,在此过程中它试图将 'SomeX,SomeY'
转换为 GUID(源列数据类型)。导致无效转换错误。
你想用在 IN
是 'SomeX'
, 'SomeY'
你实际使用的是'SomeX,SomeY'
尝试使用 table 变量并将 ID 插入其中,并结合 IN
.
使用它
declare @docId as varchar(36)
DECLARE @totalId AS VARCHAR(500)
declare @C5 as int
declare @bool as bit
set @bool =1
set @docId='fba18752-1a70-4413-bc3f-9390eaf8a7ef'
DECLARE @totalIds TABLE(id varchar(100))
INSERT INTO @totalIds
VALUES
('95B3F02C-8EBD-402E-9721-268A02830678'),
('0211CFA9-1957-4C46-A6BE-16F7B5D8C50F')
print @totalId
SELECT @C5=COUNT(*)
FROM tblSend
WHERE senDocId= @docId
AND senReceiverDepartmentId IN (select id from @totalIds)
AND senStatus in (3110,3125,3121) AND senReadDocument IN (0,2)
希望这是有道理的。
我有这个查询:
declare @docId as varchar(36)
declare @totalId AS VARCHAR(500)
declare @C5 as int
declare @bool as bit
set @bool =1
set @docId='fba18752-1a70-4413-bc3f-9390eaf8a7ef'
set @totalId='''95B3F02C-8EBD-402E-9721-268A02830678'''+','+'''0211CFA9-1957-4C46-A6BE-16F7B5D8C50F'''
print @totalId
SELECT @C5=COUNT(*) FROM tblSend WHERE senDocId= @docId AND senReceiverDepartmentId IN (@totalId) AND senStatus in (3110,3125,3121) AND senReadDocument IN (0,2)
并出现以下错误:
Msg 8169, Level 16, State 2, Line 15
Conversion failed when converting from a character string to uniqueidentifier.
但是当我把@totalId 值而不是它的变量时,它 return 像这样:
SELECT @C5=COUNT(*) FROM tblSend WHERE senDocId= @docId AND senReceiverDepartmentId IN ('95B3F02C-8EBD-402E-9721-268A02830678','0211CFA9-1957-4C46-A6BE-16F7B5D8C50F') AND senStatus in (3110,3125,3121) AND senReadDocument IN (0,2)
为什么?
因为 IN
期望单个或逗号分隔值与列值匹配。您在 IN
中证明的值是 'SomeX,SomeY'
。 SQL 服务器正在尝试在 senReceiverDepartmentId
中查找 'SomeX,SomeY'
值,在此过程中它试图将 'SomeX,SomeY'
转换为 GUID(源列数据类型)。导致无效转换错误。
你想用在 IN
是 'SomeX'
, 'SomeY'
你实际使用的是'SomeX,SomeY'
尝试使用 table 变量并将 ID 插入其中,并结合 IN
.
declare @docId as varchar(36)
DECLARE @totalId AS VARCHAR(500)
declare @C5 as int
declare @bool as bit
set @bool =1
set @docId='fba18752-1a70-4413-bc3f-9390eaf8a7ef'
DECLARE @totalIds TABLE(id varchar(100))
INSERT INTO @totalIds
VALUES
('95B3F02C-8EBD-402E-9721-268A02830678'),
('0211CFA9-1957-4C46-A6BE-16F7B5D8C50F')
print @totalId
SELECT @C5=COUNT(*)
FROM tblSend
WHERE senDocId= @docId
AND senReceiverDepartmentId IN (select id from @totalIds)
AND senStatus in (3110,3125,3121) AND senReadDocument IN (0,2)
希望这是有道理的。