2011-06-01 27 views
1

我有这个存储过程,它将信息存储在几个表中,其中一个关键变量是我可以用guid值来提供过程来绑定这些表。在存储过程中插入GUID(uniqueidentifier)值

它去像

USE [MyDatabase] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[my_createCompany] 
    @CompanyName nvarchar(255), 
    @CompanyDescription nvarchar(255), 
    @ParentGuid uniqueidentifier 
AS 
    BEGIN 

     DECLARE @CompanyGuid uniqueidentifier 
     SET @CompanyGuid = NEWID() 

     SET NOCOUNT ON 
    Insert into [dbo].[tblPROCompany] 
    (
     [CompanyGuid], 
     [CompanyName], 
     [CompanyDescription], 
     [ParentGuid] 
    ) 
    VALUES 
    (
     @CompanyGuid, 
     @CompanyName, 
     @CompanyDescription, 
     @ParentGuid 
    ) 
END 

它看起来正确的,但分配GUID的变量时@ParentGuid的过程失败。当我看着它输出这样的事情

USE [MyDatabase] 
GO  
DECLARE @return_value int  
EXEC @return_value = [dbo].[my_createCompany] 
     @CompanyName = N'Asd', 
     @CompanyDescription = NULL, 
     @ParentGuid = 4864DE55-60FB-4A69-814F-428B0178F4BB 

SELECT 'Return Value' = @return_value 

GO 

当然 消息102,级别15,状态1的错误,7号线 附近有语法错误DE55“。

因此,它不会像应该那样封装@ParentGuid。现在,我已经有了一个解决办法,宣布@ParentGuid为VARCHAR

@ParentGuid varchar(37), --uniqueidentifier 

,并转换到插入

if @ParentGuid is not null 
BEGIN 
    DECLARE @ParentGuidConverted uniqueidentifier 
    SET @ParentGuidConverted = convert(uniqueidentifier, @ParentGuid) 
END 

是否有这样做的更好的办法之前,数据库想要什么?

谢谢

回答

2

这只是使用SSMS向导执行存储过程时(部分)中断的行为。当从客户端代码实际调用它时,大多数数据访问库允许您使用适当的类型传递参数(例如,作为.Net代码中的Guid),并且数据访问库将确保它正确传递。

如果直接将它写入查询窗口,请用单引号将值包围。

+0

这绝对是正确的,从来没有想到这一点。 – 2011-06-01 10:30:20

4

你有没有试过在GUID周围放置单个新物种。

+0

正确,但只在Sql管理工作室需要! – 2011-06-01 10:30:55

0
USE [MyDatabase] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[my_createCompany] 
    @CompanyName nvarchar(255), 
    @CompanyDescription nvarchar(255), 

AS 
    BEGIN 



     SET NOCOUNT ON 
    Insert into [dbo].[tblPROCompany] 
    (
     [CompanyGuid], 
     [CompanyName], 
     [CompanyDescription], 
     [ParentGuid] 
    ) 
    VALUES 
    (
     NEWID(), 
     @CompanyName, 
     @CompanyDescription, 
     NEWID() 
    ) 
END 
+2

你能解释你的解决方案吗? – btel 2012-11-15 23:54:30