2009-09-25 49 views
20

在SQL 9(2005)中創建了一個存儲過程,並已升級到SQL 10(2008)。從那時起,以下存儲過程已停止工作,並拋出了上述錯誤:從字符串轉換爲uniqueidentifier時轉換失敗

ALTER PROCEDURE [dbo].[GetModifiedPages] 
    @vPortalUID   nvarchar(32) = '' 
AS 
BEGIN 
    -- Convert GUID to UI 
    DECLARE @nPortalUID AS uniqueidentifier 
    SET @nPortalUID = CAST(@vPortalUID AS uniqueidentifier) 

將在參數@vPortalUID通過包含:2A66057D-F4E5-4E2B-B2F1-38C51A96D385。我執行存儲過程像這樣:

EXEC GetModifiedPages '2A66057D-F4E5-4E2B-B2F1-38C51A96D385' 

它倒下了。我已經嘗試過轉換。仍然沒有快樂。周圍也有{{}}的價值。我按照上面的步驟手動刪除了這些文件。

如果您有興趣,我正在從ASP經典頁面運行SP,但這應該不會影響到這一點,因爲上面的代碼是使用SSMS運行的。

在此先感謝您的幫助。 詹姆斯

回答

31

失敗:

DECLARE @vPortalUID NVARCHAR(32) 
SET @vPortalUID='2A66057D-F4E5-4E2B-B2F1-38C51A96D385' 
DECLARE @nPortalUID AS UNIQUEIDENTIFIER 
SET @nPortalUID = CAST(@vPortalUID AS uniqueidentifier) 
PRINT @nPortalUID 

這個作品

DECLARE @vPortalUID NVARCHAR(36) 
SET @vPortalUID='2A66057D-F4E5-4E2B-B2F1-38C51A96D385' 
DECLARE @nPortalUID AS UNIQUEIDENTIFIER 
SET @nPortalUID = CAST(@vPortalUID AS UNIQUEIDENTIFIER) 
PRINT @nPortalUID 

不同的是NVARCHAR(36),您輸入的參數是太小了!

+3

+1因爲他的參數太小,但應該指出的是,因爲這個原因,他的字符串實際上被截斷了。如果您在轉換之前執行了「打印vPortalUID」,您會發現'D385'沒有完成切割。 – Eric 2009-09-25 12:11:56

+0

謝謝!做得好!現在改變20 SP! ;) – jamesmhaley 2009-09-25 13:49:00

+0

我不知道我爲什麼要這樣做http://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server:p ..我應該先把varchar +當然是1! – Zerotoinfinity 2013-07-12 13:12:55

相關問題