我有这个存储过程,它将信息存储在几个表中,其中一个关键变量是我可以用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
是否有这样做的更好的办法之前,数据库想要什么?
谢谢
这绝对是正确的,从来没有想到这一点。 – 2011-06-01 10:30:20