Sql 为什么可以';将唯一标识符/GUID传递给存储过程
我有这个SPSql 为什么可以';将唯一标识符/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
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本身。尝试用单引号将其分隔。两个提示:
- 首先,不要专门调用您的存储过程
- 第二:我可以这样调用您的存储过程:
EXEC proc_test 'B551F2C8-8380-491B-A51F-436E51CDD08F'
您如何调用存储过程??让我们看看 100%同意@marc_s的前缀。别这样。在所有过程之前使用sp_uu或usp_u或任何东西都绝对没有好处。就像给tabls命名为“tblMyTable”或其他什么都没有好处一样,这也不是个坏主意。在我开始研究如何处理guid之前,我一直在考虑这一点,并且偶然发现了这篇文章。我认为这个解决方案只会将OP的问题转移到转换函数调用上。它对我有效,这是我问题的解决方案