【发布时间】: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