Sql 使用uniqueidentifier输入参数执行存储过程时出错

Sql 使用uniqueidentifier输入参数执行存储过程时出错,sql,sql-server,stored-procedures,uniqueidentifier,Sql,Sql Server,Stored Procedures,Uniqueidentifier,当我执行具有类型为uniqueidentifier的第一个输入参数的存储过程时,该参数是表中插入值的主键列,它抛出以下错误。我找不到这个输入或存储过程有什么问题 EXEC @return_value = DbInsert @id = EX642793-385D-604F-BE81-0000CD376836, @name= N'000001_067_0xed642993385d604fbe810000cd376836.tif', @imag

当我执行具有类型为
uniqueidentifier
的第一个输入参数的存储过程时,该参数是表中插入值的主键列,它抛出以下错误。我找不到这个输入或存储过程有什么问题

EXEC    @return_value = DbInsert
        @id =   EX642793-385D-604F-BE81-0000CD376836,
        @name= N'000001_067_0xed642993385d604fbe810000cd376836.tif',
        @image = 0x49492A00080000001300FE00040001000000020000000001040001000000C50900000101040001000000E90D0000020103000

SELECT  'Return Value' = @return_value
我的存储过程:

CREATE PROCEDURE DbInsert
    @id UNIQUEIDENTIFIER,
    @name VARCHAR(255),
    @image IMAGE
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO TbImage (Id, Name, Image )
    VALUES (@id, @name, @image)
END
错误:

味精102,第15级,状态1,第7行
“-”附近的语法不正确

更新

我试图右键单击存储过程并执行,但它没有要求我提供quote和all,但我上面写的查询显示为error。当我尝试引用时,它会抛出下面的错误


Msg 8114,16级,状态1,程序DbInsert,第0行[批处理起始行2]
将数据类型varchar转换为uniqueidentifier时出错。(1行受影响)

再次更新

通过自己更改一些数字来使用有效的
Uniqueidentifier
,但是用其他字符替换了X…仍然没有运气

EM662993-385D-604F-BE81-0000CD376838

您的代码有两个问题:

  • 您需要对唯一标识符进行单引号引用,例如“DE5AA552-0601-453C-AF21-9B285FA4E920”

  • guid/uniqueidentifier必须只包含有效的十六进制字符,
    X
    不是有效的十六进制字符,因此在uniqueidentifier中无效,因此
    'EX642793-385D-604F-BE81-0000CD376836'
    无效,但
    'EA642793-385D-604F-BE81-0000CD376836'
    无效。您可以使用来验证和生成guid


  • 您的代码有两个问题:

  • 您需要对唯一标识符进行单引号引用,例如“DE5AA552-0601-453C-AF21-9B285FA4E920”

  • guid/uniqueidentifier必须只包含有效的十六进制字符,
    X
    不是有效的十六进制字符,因此在uniqueidentifier中无效,因此
    'EX642793-385D-604F-BE81-0000CD376836'
    无效,但
    'EA642793-385D-604F-BE81-0000CD376836'
    无效。您可以使用来验证和生成guid



  • @DaleBurrell:它自动让我在右键单击并执行过程中输入值。我还需要手动输入报价吗?我不这么认为?我甚至引用了,它没有帮助MSG 8114,级别16,状态1,过程DbInsert,第0行[Batch Start Line 2]将数据类型varchar转换为uniqueidentifier时出错。(1行受影响)@DaleBurrell:没有运气,伙计,它抛出了另一个错误,但是它也说一行受影响,冲突?你怎么会得到无效的guid?@DaleBurrell:我不知道X是无效的,我猜我运气很差,我只在那个地方放了X作为测试呵呵。。。。哈哈,正如我的占星术所说,我的编程运气不好。计算机和我从来都不顺利,即使我做得更好lol@DaleBurrell:它自动让我在右键单击并执行过程中输入值。我还需要手动输入报价吗?我不这么认为?我甚至引用了,它没有帮助MSG 8114,级别16,状态1,过程DbInsert,第0行[Batch Start Line 2]将数据类型varchar转换为uniqueidentifier时出错。(1行受影响)@DaleBurrell:没有运气,伙计,它抛出了另一个错误,但是它也说一行受影响,冲突?你怎么会得到无效的guid?@DaleBurrell:我不知道X是无效的,我猜我运气很差,我只在那个地方放了X作为测试呵呵。。。。哈哈,正如我的占星术所说,我的编程运气不好。计算机和我从来都不顺利,即使我做得更好。“X”肯定是“将数据类型varchar转换为uniqueidentifier时出错”的原因。好地方+1@Dale,我没法把它修好。引号绝对不是问题,因为如果是一个引号,那么微软应该重新设计他们的管理工作室,让它自动包含在其中,就像它对Varchar和char所做的那样。你可以看到其他列,它们是Varchar和char,所以MS会自动在单个引号中表示这些列。但不是唯一标识符。这对我没有帮助,当我选择查询时,我看不到插入的数据,因为它抛出错误,说无法将varchar转换为uniqueidentifier
    M
    X
    更有效-给自己找一个工作guid!您必须遵守规则。“X”肯定是“将数据类型varchar转换为uniqueidentifier时出错”的原因。好地方+1@Dale,我没法把它修好。引号绝对不是问题,因为如果是一个引号,那么微软应该重新设计他们的管理工作室,让它自动包含在其中,就像它对Varchar和char所做的那样。你可以看到其他列,它们是Varchar和char,所以MS会自动在单个引号中表示这些列。但不是唯一标识符。这对我没有帮助,当我选择查询时,我看不到插入的数据,因为它抛出错误,说无法将varchar转换为uniqueidentifier
    M
    X
    更有效-给自己找一个工作guid!你必须遵守规则。