【问题标题】:Error executing stored procedure with uniqueidentifier input parameter使用 uniqueidentifier 输入参数执行存储过程时出错
【发布时间】:2018-12-18 03:35:38
【问题描述】:

当我执行具有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 行
'-' 附近的语法不正确。

更新

我尝试右键单击存储过程并执行,它并没有要求我提供报价和所有内容,但我上面写的查询是它显示为错误的内容。当我尝试引用时,它会抛出错误

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

再次更新

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

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

【问题讨论】:

  • @DaleBurrell:它自动让我在右键单击中输入值并执行 proc。我还需要手动输入报价吗?我不这么认为?而且我什至引用了,它没有帮助
  • Msg 8114,级别 16,状态 1,过程 DbInsert,第 0 行 [Batch Start Line 2] 将数据类型 varchar 转换为 uniqueidentifier 时出错。 (1 行受影响)
  • @DaleBurrell:运气不好,它会抛出另一个错误,但是它也说一行受到影响,冲突?
  • 你是怎么得到那个无效的 guid 的?
  • @DaleBurrell:我不知道 X 是无效的,我猜我运气不好,我只在那个地方把 X 作为测试,呵呵....哈哈,我的编程运气很差,如我的占星术。即使我的输出做得更好,计算机和我也永远不会好起来lol

标签: sql sql-server stored-procedures uniqueidentifier


【解决方案1】:

您的代码有 2 个问题:

  1. 您需要单引号唯一标识符,例如'DE5AA552-0601-453C-AF21-9B285FA4E920'.

  2. guid/uniqueidentifier 必须只包含有效的十六进制字符,而X 不是有效的十六进制字符,因此在唯一标识符中无效,因此'EX642793-385D-604F-BE81-0000CD376836' 无效但'EA642793-385D-604F-BE81-0000CD376836' 有效。您可以使用http://guid.us/Test/GUID 来验证和生成 guid。

【讨论】:

  • “X”绝对是“将数据类型 varchar 转换为 uniqueidentifier 时出错”的原因。好地方+1
  • @Dale,我无法解决这个问题。引号绝对不是问题,因为如果它是一个问题,那么微软应该重新设计他们的管理工作室,让它像 Varchar 和 char 一样自动包含在内。
  • 你看到其他列,它们是 varchar 和 char,所以 MS 自动将它们表示在单引号中。但不适用于唯一标识符。
  • 这对我没有帮助,当我选择查询时我看不到任何数据插入,因为它会抛出错误,说无法将 varchar 转换为 uniqueidentifier
  • M 并不比X 更有效——给自己找一个工作指南!你必须遵守规则。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多