Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么可以';将唯一标识符/GUID传递给存储过程_Sql_Sql Server 2005_Stored Procedures - Fatal编程技术网

Sql 为什么可以';将唯一标识符/GUID传递给存储过程

Sql 为什么可以';将唯一标识符/GUID传递给存储过程,sql,sql-server-2005,stored-procedures,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 * f

我有这个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,15级,状态1,第5行 “cac671b”附近的语法不正确


那么为什么我不能发送guid呢?即使是从数据库中直接复制的,并且必须是有效的,因为它们被允许进入数据库。

我想您是在复制和粘贴字符串。你能这样声明和使用它吗

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

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

“cac671b”附近的语法不正确

必须意味着它正在尝试解析GUID本身。尝试用单引号将其分隔。

两个提示:

  • 首先,不要专门调用您的存储过程
我们建议您不要创建 使用sp作为 前缀SQL Server使用sp_uu前缀 指定系统存储过程。 您选择的名称可能与冲突 一些未来的系统程序

  • 第二:我可以这样调用您的存储过程:

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

您如何调用存储过程??让我们看看

100%同意@marc_s的前缀。别这样。在所有过程之前使用sp_uu或usp_u或任何东西都绝对没有好处。就像给tabls命名为“tblMyTable”或其他什么都没有好处一样,这也不是个坏主意。在我开始研究如何处理guid之前,我一直在考虑这一点,并且偶然发现了这篇文章。我认为这个解决方案只会将OP的问题转移到转换函数调用上。它对我有效,这是我问题的解决方案