【问题标题】:I am getting error "Conversion failed when converting from a character string to uniqueidentifier."我收到错误“从字符串转换为唯一标识符时转换失败。”
【发布时间】:2026-02-02 05:15:01
【问题描述】:

我正在发送我在 fom c# 中创建的字符串,并将其发送到一个程序在那里我将它用作 nvarchar(1000),然后在 SQL IN 运算符中使用它,但我收到错误“转换时转换失败从字符串到唯一标识符。”

我正在发送这个

SET @a='E1554084-7B8F-4F04-B6B3-4892E4C5687F','4B555046-152B-411D-A611-D9D507906259' 

在字符串生成器中,我想使用逗号作为运算符而不是 sqlserver 中的字符串

SELECT * FROM MemberJobDetails WHERE GradeID IN (@a) 

这里 GradeID 是唯一标识符

【问题讨论】:

  • 将您的字符串转换为 sql 语句中的唯一标识符或尝试简单地将括号括在 guid 字符串 {...}
  • 您的参数@a 是一个单个字符串,而IN 运算符需要一个项目列表作为其参数...。
  • 碰巧包含逗号的单个字符串在逻辑上与用逗号分隔的多个字符串不同。你所拥有的是前者。在此处搜索参数化IN,您会发现大量具有各种(更好或更差)解决方案的骗子。
  • 我做了一些修改,请考虑一下

标签: sql-server


【解决方案1】:
Following query may help you

DECLARE @UID NVARCHAR(2000)
SET @UID='2A66057D-F4E5-4E2B-B2F1-38C51A96D385'
DECLARE @nUID AS UNIQUEIDENTIFIER
SET @nUID = CAST(@UID AS UNIQUEIDENTIFIER)
PRINT @nUID

【讨论】:

    【解决方案2】:

    两种方法

    1 动态 SQL

    declare @a varchar(1000)
    SET @a='E1554084-7B8F-4F04-B6B3-4892E4C5687F,4B555046-152B-411D-A611-D9D507906259' 
    
    set @a=''''+replace(@a,',',''',''')+''''
    
    declare @sql varchar(8000)
    set @sql='SELECT * FROM MemberJobDetails WHERE GradeID IN ('+@a+')'
    exec(@sql)
    

    2 静态 SQL

    SELECT * FROM MemberJobDetails WHERE ','+@a+',' like '%,'+GradeID+',%'
    

    【讨论】: