2009-06-06 72 views
13

我有一个存储proc是我想插入一个GUID(用户id)到MS SQL中的表中,但我不断收到有关作为guid值一部分的连字符' - '的错误,这里是我的过程定义如下;插入GUID到SQL Server

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

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

但是,如果在Management Studio中执行存储的proc时,它将单引号括起来,它运行良好。我怎样才能处理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 '-'. 
+0

您是否错误地转置了您的userid和bookid参数?你能发布一个导致bug的例子EXEC语句吗?到目前为止您的SQL看起来很好。 – 2009-06-06 14:45:53

回答

28

只需从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 
9

您只需QUOTE您的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 

中号arc

+0

4秒打败我。删除我的。 – 2009-06-06 14:53:02

+0

是的,我注意到,所以我怎么能从我的存储过程中做到这一点,因为当我尝试这样做时,说varchar不能转换为唯一标识符的错误是我得到的。谢谢 – simplyme 2009-06-06 14:54:27

1

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

您可以尝试让sp生成带有sql函数newid()的GUID ...我只是想。

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

0

尝试使用这样的:

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

这将需要一个简单的字符串代表。并把它变成一个GUID obj。