2011-06-01 62 views
1

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

是否有這樣做的更好的辦法之前,數據庫想要什麼?

謝謝

回答

2

這只是使用SSMS嚮導執行存儲過程時(部分)中斷的行爲。當從客戶端代碼實際調用它時,大多數數據訪問庫允許您使用適當的類型傳遞參數(例如,作爲.Net代碼中的Guid),並且數據訪問庫將確保它正確傳遞。

如果直接將它寫入查詢窗口,請用單引號將值包圍。

+0

這絕對是正確的,從來沒有想到這一點。 – 2011-06-01 10:30:20

4

你有沒有試過在GUID周圍放置單個新物種。

+0

正確,但只在Sql管理工作室需要! – 2011-06-01 10:30:55

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 
+2

你能解釋你的解決方案嗎? – btel 2012-11-15 23:54:30