将GUID插入SQL Server

sim*_*yme 15 sql guid insert

我有一个存储过程,我想将一个GUID(用户ID)插入到MS SQL中的表中,但我一直收到关于连字符' - '的错误,这是guid值的一部分,这里是我在下面定义的proc;

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

INSERT INTO Reservation(BookId, DateReserved, [Status], UserId)
VALUES (@bookID, @dateReserved, @status, @userID)
Run Code Online (Sandbox Code Playgroud)

但是,如果在Management Studio中执行存储过程,我会在值周围放置单引号,它运行正常.如何处理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
Run Code Online (Sandbox Code Playgroud)

这是错误消息

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near '-'.
Run Code Online (Sandbox Code Playgroud)

Sör*_*lau 29

只需从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
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 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
Run Code Online (Sandbox Code Playgroud)

  • 使用字符串仅在某些情况下有效.将字符串转换为uniquidentifier在所有情况下都适用. (5认同)