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)

希望这是有道理的。