2010-06-12 43 views
9

我有這樣的SP爲什麼我不能傳遞唯一標識符/ GUID來存儲過程

USE [TestDB] 
GO 
/****** Object: StoredProcedure [dbo].[sp_test] Script Date: 06/12/2010 11:47:27 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[sp_test] 
    @id uniqueidentifier 
AS 
BEGIN 

    select * from TestTbl where ProductId= @id 

END 

然後我去了SP與MS SQL 2005和點擊執行。它出現了一個我在GUID中輸入的框。我直接從我的測試數據庫中複製並粘貼它。

我得到這個錯誤。

Msg 102,Level 15,State 1,Line 5 'cac671b'附近語法不正確。

那麼爲什麼我不能發送GUID?即使是從數據庫中正確複製的數據,並且必須在允許進入數據庫的位置有效。

+0

100%贊同@marc_s前綴。不要。在所有procs前面使用sp_或usp_或任何東西絕對沒有好處。就像命名tabls'tblMyTable'或其他任何東西沒有任何好處。 – NotMe 2011-03-11 22:45:54

回答

15

兩個提示:

我們建議您不要創建 使用任何存儲過程sp_作爲 前綴。 SQL Server使用sp_前綴 來指定系統存儲過程。 您選擇的名稱可能與 某些未來的系統過程相沖突。

  • 其次:我沒有麻煩呼喚你的存儲過程是這樣的:

    EXEC proc_test 'B551F2C8-8380-491B-A51F-436E51CDD08F' 
    

怎麼樣呼喚你的存儲過程?給我們看一看!

-2

我想你正在複製和粘貼一個字符串。你能像這樣聲明和使用它嗎?

CREATE PROCEDURE [dbo].[sp_test] 
    @guidstr varchar(37) 
AS 

DECLARE @guid uniqueidentifier 
SET @guid = CONVERT(uniqueidentifier, @guidstr) 
... 
+0

這不是一個好主意。在我開始尋找我如何處理指導並且遇到這篇文章之前,我正在考慮這些內容。我認爲這個解決方案只會將OP的問題轉移到CONVERT函數調用。 – froggythefrog 2014-07-27 20:18:16

5

消息

附近有語法錯誤cac671b'。

必須表示它試圖解析GUID本身。嘗試用單引號分隔它。

相關問題