在存储过程中插入GUID(uniqueidentifier)值

时间:2011-06-01 09:45:51

标签: sql-server-2008 stored-procedures

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

它类似于

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

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

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

当然是错误     Msg 102,Level 15,State 1,Line 7     'DE55'附近的语法不正确。

所以它没有应该封装@ParentGuid。现在我已经做了一个解决方法,将@ParentGuid声明为varchar

@ParentGuid varchar(37), --uniqueidentifier

并在插入之前将其转换为数据库所需的内容

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

有更好的方法吗?

由于

3 个答案:

答案 0 :(得分:4)

您是否尝试过将单引号放在guid周围。

答案 1 :(得分:2)

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

如果直接将其写入查询窗口,请用单引号括起该值。

答案 2 :(得分: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