我有這個存儲過程,它將信息存儲在幾個表中,其中一個關鍵變量是我可以用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