为什么我不能将uniqueidentifier / GUID传递给存储过程

时间:2010-06-12 18:50:45

标签: sql sql-server-2005 stored-procedures

我有这个SP

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

然后我使用ms sql 2005转到SP并单击执行。它出现了一个我在GUID中输入的框。我直接从我的测试数据库中复制并粘贴了它。

我收到此错误。

  

Msg 102,Level 15,State 1,Line 5   'cac671b'附近的语法不正确。

那为什么我不能发送GUID?甚至是从数据库中复制的,并且必须在允许进入数据库的地方有效。

3 个答案:

答案 0 :(得分:18)

两个提示:

  

我们建议您不要创建   使用 sp _ 作为的任何存储过程   字首。 SQL Server使用sp_前缀   指定系统存储过程。   您选择的名称可能会与之冲突   一些未来的系统程序。

  • 其次:我可以像这样调用你的存储过程:

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

如何调用你的存储过程?给我们看一看!

答案 1 :(得分:6)

消息

  

'cac671b'附近的语法不正确。

必须表示它正在尝试解析GUID本身。尝试用单引号分隔它。

答案 2 :(得分:-2)

我想你正在复制并粘贴一个字符串。你可以像这样申报和使用吗?

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

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