将GUID插入SQL Server

17

我有一个存储过程,想要将一个 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)

但是,当我在存储过程的值周围加上单引号时,在管理工作室中执行存储过程时,它可以正常运行。如何在我的存储过程中处理guid插入而不出现问题?

谢谢大家。

更新 这是SQL exec:

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看起来很好。 - Jim Counts
4个回答

31

只需将它从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

10

你只需要引用你的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

Marc


你比我快了4秒钟。我删除我的。 - Matthew Vines
是的,我注意到了。那么我该如何在我的存储过程中实现呢?因为当我尝试这样做时,我得到了一个错误,说一个 varchar 无法转换为 uniqueidentifier。谢谢。 - simplyme
@simply:听起来好像那个才是真正的问题;你能加上那行代码,它会创建那个varchar/uid错误信息吗? - p.campbell
5
仅使用字符串在某些情况下有效,将字符串转换为唯一标识符则适用于所有情况。 - Jeff Davis

1

你需要在GUID周围加上单引号...它只是一个字符串给SQL Server。

你可以尝试让存储过程使用SQL函数newid()生成GUID...我想这只适用于SQL Server。

如果你从另一个表中获取GUID,就让存储过程去那个表中获取GUID。


0

尝试使用这个:

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

这将把一个简单的字符串表示转换为 GUID 对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接