【问题标题】:Inserting GUID (uniqueidentifier) value in stored procedure在存储过程中插入 GUID(唯一标识符)值
【发布时间】:2011-06-01 09:45:51
【问题描述】:

我有这个存储过程,它将信息存储在几个表中,其中一个关键变量是我可以为过程提供一个 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

看起来是对的,但是当将 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

有更好的方法吗?

谢谢

【问题讨论】:

    标签: sql-server-2008 stored-procedures


    【解决方案1】:

    您是否尝试过在 guid 周围加上单引号。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
        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
        

        【讨论】:

        • 您能解释一下您的解决方案吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        • 2013-10-18
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-04
        相关资源
        最近更新 更多