【问题标题】:Inserting GUID into SQL Server将 GUID 插入 SQL Server
【发布时间】:2010-10-31 21:12:00
【问题描述】:

我有一个存储过程,如果我想将 GUID(用户 ID)插入 MS SQL 中的表中,但我不断收到关于作为 guid 值一部分的连字符“-”的错误,这是我在下面定义的过程;

@userID uniqueidentifier,
@bookID int,
@dateReserved datetime,
@status bit

INSERT INTO Reservation(BookId, DateReserved, [Status], UserId)
VALUES (@bookID, @dateReserved, @status, @userID)

但是,如果存储过程在 Management Studio 中执行,则当我在值周围加上单引号时,它运行良好。如何处理 guid 插入而不会出现存储过程中的问题?

谢谢大家。

更新 这是 sql 执行

DECLARE @return_value int

EXEC    @return_value = [dbo].[usp_ReserveBook]
    @userID = AE019609-99E0-4EF5-85BB-AD90DC302E70,
    @bookID = 7,
    @dateReserved = N'09/03/2009',
    @status = 1

SELECT  'Return Value' = @return_value

这是错误信息

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near '-'.

【问题讨论】:

  • 您是否错误地转置了您的 userid 和 bookid 参数?您能否发布导致该错误的示例 EXEC 语句。到目前为止,您的 SQL 看起来不错。

标签: sql insert guid


【解决方案1】:

您只需引用您的 GUID:

DECLARE @return_value int

EXEC    @return_value = [dbo].[usp_ReserveBook]
        @userID = 'AE019609-99E0-4EF5-85BB-AD90DC302E70',  
        @bookID = 7,
        @dateReserved = N'09/03/2009',
        @status = 1

SELECT  'Return Value' = @return_value

马克

【讨论】:

  • 领先我 4 秒。删除我的。
  • 是的,我注意到了,那么我该如何从我的存储过程中做到这一点,因为当我尝试这样做时,我得到了一个错误,即无法将 varchar 转换为 uniqueidentifier。谢谢
  • @simply:听起来像*是真正的问题;您可以添加创建该 varchar/uid 错误消息的那行代码吗?
  • 仅在某些情况下使用字符串。将字符串转换为唯一标识符适用于所有情况。
【解决方案2】:

你需要在你的 GUID 周围加上单引号......它只是一个到 sql server 的字符串。

您可以尝试让 sp 使用 sql 函数 newid() ...仅我认为的 sql 服务器生成 GUID。

如果您要从另一个表中提取 GUID,请让 SP 从该表中获取该 GUID。

【讨论】:

    【解决方案3】:

    只需从 varchar 中转换它。

    DECLARE @return_value int
    
    EXEC    @return_value = [dbo].[usp_ReserveBook]
            @userID = CONVERT(uniqueidentifier, 'AE019609-99E0-4EF5-85BB-AD90DC302E70'),
            @bookID = 7,
            @dateReserved = N'09/03/2009',
            @status = 1
    
    SELECT  'Return Value' = @return_value
    

    【讨论】:

      【解决方案4】:

      试试这个:

      sql_cmd.Parameters.AddWithValue
      ("@Company_ID",**Guid.Parse**("00000000-0000-0000-0000-000000000000");
      

      这将需要一个简单的字符串代表。并将其转换为 GUID obj。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-15
        • 1970-01-01
        • 2016-03-02
        • 1970-01-01
        • 1970-01-01
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多