Почему я не могу передать уникальный идентификатор / GUID хранимой процедуре - PullRequest
10 голосов
/ 12 июня 2010

У меня есть этот 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

Затем я пошел в SP с MS SQL 2005 и нажал выполнить.Это приходит с коробкой, где я ввел в GUID.Я скопировал и вставил его прямо из моей тестовой базы данных.

Я получаю эту ошибку.

Сообщение 102, Уровень 15, Состояние 1, Строка 5 Неверный синтаксис рядом с 'cac671b'.

Так почему я не могу отправить GUID?даже те, которые скопированы прямо из базы данных и должны быть действительными, если они разрешены в БД.

Ответы [ 3 ]

18 голосов
/ 13 июня 2010

Два совета:

Рекомендуем не создавать любые хранимые процедуры, использующие sp_ в качестве префикс. SQL Server использует префикс sp_ для обозначения системных хранимых процедур. Имя, которое вы выбираете, может конфликтовать с некоторая будущая системная процедура.

  • во-вторых: у меня нет проблем с тем, чтобы вызвать ваш сохраненный процесс следующим образом:

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

Как Вы вызываете свой сохраненный процесс ?? Показать нам!

6 голосов
/ 12 июня 2010

Сообщение

Неверный синтаксис рядом с 'cac671b'.

Должно означать, что он пытается проанализировать сам GUID. Попробуйте разделить его в одинарных кавычках.

0 голосов
/ 12 июня 2010

Я полагаю, вы копируете и вставляете строку. Можете ли вы заявить и использовать это так?

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

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