Вставка GUID в SQL Server

У меня есть сохраненная процедура, в которой я хочу вставить GUID (идентификатор пользователя) в таблицу в MS SQL, но я продолжаю получать сообщение об ошибке о дефисе «-», который является частью значения guid, вот моя процедура, определенная ниже;

@userID uniqueidentifier,
@bookID int,
@dateReserved datetime,
@status bit

INSERT INTO Reservation(BookId, DateReserved, [Status], UserId)
VALUES (@bookID, @dateReserved, @status, @userID)

Но когда я помещаю значение в одинарные кавычки, если хранимый процесс выполняется в Management Studio, он работает нормально. Как я могу без проблем обрабатывать вставку guid из моего хранимого процесса?

Спасибо ребята.

Обновление Вот sql exec

DECLARE @return_value int

EXEC    @return_value = [dbo].[usp_ReserveBook]
    @userID = AE019609-99E0-4EF5-85BB-AD90DC302E70,
    @bookID = 7,
    @dateReserved = N'09/03/2009',
    @status = 1

SELECT  'Return Value' = @return_value

Вот сообщение об ошибке

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near '-'.

person simplyme    schedule 06.06.2009    source источник
comment
Вы по ошибке переставили свои аргументы userid и bookid? Можете ли вы опубликовать пример оператора EXEC, который вызывает ошибку. Ваш SQL пока выглядит нормально.   -  person Jim Counts    schedule 06.06.2009


Ответы (4)


Просто бросьте его из varchar.

DECLARE @return_value int

EXEC    @return_value = [dbo].[usp_ReserveBook]
        @userID = CONVERT(uniqueidentifier, 'AE019609-99E0-4EF5-85BB-AD90DC302E70'),
        @bookID = 7,
        @dateReserved = N'09/03/2009',
        @status = 1

SELECT  'Return Value' = @return_value
person Sören Kuklau    schedule 06.06.2009

Вам просто нужно ПРОЦИТИРОВАТЬ свой GUID:

DECLARE @return_value int

EXEC    @return_value = [dbo].[usp_ReserveBook]
        @userID = 'AE019609-99E0-4EF5-85BB-AD90DC302E70',  
        @bookID = 7,
        @dateReserved = N'09/03/2009',
        @status = 1

SELECT  'Return Value' = @return_value

Марк

person marc_s    schedule 06.06.2009
comment
опередил меня на 4 секунды. Удаление моего. - person Matthew Vines; 06.06.2009
comment
Да, я заметил это, так как я могу сделать это из своего сохраненного процесса, потому что, когда я пытался это сделать, я получил ошибку, говорящую о том, что varchar не может быть преобразован в уникальный идентификатор. Спасибо - person simplyme; 06.06.2009
comment
@просто: звучит так, будто* это настоящая проблема; Вы можете добавить ту строку кода, которая создает это сообщение об ошибке varchar/uid? - person p.campbell; 06.06.2009
comment
Использование строки работает только в некоторых случаях. Преобразование строки в уникальный идентификатор работает во всех случаях. - person Jeff Davis; 14.08.2009

Вам нужны одинарные кавычки вокруг вашего GUID.... это просто строка для сервера sql.

Вы можете попробовать позволить sp генерировать GUID с помощью функции sql newid()... sql server только я думаю.

И если вы извлекаете GUID из другой таблицы, пусть SP получит этот GUID из этой таблицы.

person Jody    schedule 06.06.2009

Попробуйте использовать это:

sql_cmd.Parameters.AddWithValue
("@Company_ID",**Guid.Parse**("00000000-0000-0000-0000-000000000000");

Это займет простое представление строки. и превратить его в объект GUID.

person James Stewart    schedule 15.07.2013