2012-03-26 81 views
0

我試圖運行此代碼:SQL Server和GUID?

exec myStoredProcedure 
    Cast('c5b48202-36af-4597-9780-5366d4188f55' AS uniqueidentifier), 
    744, 
    1, 
    'test', 
    'Chrysanthemum.jpg', 
    '2012-03-26 16:22:17', 
    1, 
    28402, 
    null 

但我得到下面的異常

消息102,級別15,狀態1,行2
附近有語法錯誤c5b48202-36af- 4597-9780-5366d4188f55' 。

爲什麼?我該如何解決它?

+0

你可以刪除投(將它轉換爲你),可能不能在參數列表中的函數調用。 – dotjoe 2012-03-26 14:46:08

回答

1

顯然你不能使用強制轉換參數列表。我只是想確定,所以我跑了一個小測試:

create procedure myProc 
@param1 uniqueidentifier 
as 
begin 
select 1 
end 


exec myProc Cast('c5b48202-36af-4597-9780-5366d4188f55' AS uniqueidentifier) -- fails 
exec myProc 'c5b48202-36af-4597-9780-5366d4188f55' --ok 
3

調用存儲過程時,不能執行CAST。你可以在執行sp之前將它分配給一個變量,或者直接調用它以傳遞VARCHAR(它可能會隱式轉換就好了)。

DECLARE @GUID UnIQUEIDENTIFIER 
SET @GUID = 'c5b48202-36af-4597-9780-5366d4188f55' 

EXEC myStoredProcedure @GUID, 744, 
    1, 
    'test', 
    'Chrysanthemum.jpg', 
    '2012-03-26 16:22:17', 
    1, 
    28402, 
    null 
+0

這將給我以下excetpion:Msg 8114,級別16,狀態5,過程myStoredProcedure,行0 將數據類型nvarchar轉換爲uniqueidentifier時出錯。 – Banshee 2012-03-26 14:50:04

+0

@SnowJim - 這是您的存儲過程中的錯誤,但變量的轉換工作正常(我在發佈前測試過)。您必須在引發此衝突的sp內的數據類型之間進行比較。您應該在另一個問題上發佈代碼以嘗試修復它 – Lamak 2012-03-26 14:58:49

+0

@SnowJim,您是如何定義存儲porc中的第一個參數的?它從錯誤消息中看出它被定義爲一個nvarchar而不是唯一標識符。 – HLGEM 2012-03-26 17:33:53

0

您不能在EXEC命令中使用計算。

你必須這樣做:

DECLARE @guid uniqueidentifier 

SET @guid = 'c5b48202-36af-4597-9780-5366d4188f55' 

exec myStoredProcedure 
    @guid, 
    744, 
    1, 
    'test', 
    'Chrysanthemum.jpg', 
    '2012-03-26 16:22:17', 
    1, 
    28402, 
    null