У меня есть эта хранимая процедура, которая хранит информацию в нескольких таблицах, и одной из ключевых переменных является то, что я могу передать процедуре значение guid для связывания этих таблиц.
Это выглядит как
USE [MyDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[my_createCompany]
@CompanyName nvarchar(255),
@CompanyDescription nvarchar(255),
@ParentGuid uniqueidentifier
AS
BEGIN
DECLARE @CompanyGuid uniqueidentifier
SET @CompanyGuid = NEWID()
SET NOCOUNT ON
Insert into [dbo].[tblPROCompany]
(
[CompanyGuid],
[CompanyName],
[CompanyDescription],
[ParentGuid]
)
VALUES
(
@CompanyGuid,
@CompanyName,
@CompanyDescription,
@ParentGuid
)
END
Выглядит правильно, но при назначении GUID переменной @ParentGuid процедура завершается ошибкой.Когда я смотрю на вывод, это что-то вроде этого
USE [MyDatabase]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[my_createCompany]
@CompanyName = N'Asd',
@CompanyDescription = NULL,
@ParentGuid = 4864DE55-60FB-4A69-814F-428B0178F4BB
SELECT 'Return Value' = @return_value
GO
И ошибка курса Msg 102, Уровень 15, Состояние 1, Строка 7 Неверный синтаксис рядом с 'DE55'.
Так этоне инкапсулирует @ParentGuid как следует.Сейчас я сделал обходной путь, объявляя @ParentGuid как varchar
@ParentGuid varchar(37), --uniqueidentifier
и преобразовывая его в то, что база данных хочет до вставки
if @ParentGuid is not null
BEGIN
DECLARE @ParentGuidConverted uniqueidentifier
SET @ParentGuidConverted = convert(uniqueidentifier, @ParentGuid)
END
Есть ли лучший способделать это?
Спасибо