У меня странная проблема с проектом базы данных VS2010, который не может выполнить сгенерированный сценарий развертывания, который использует определяемый пользователем тип таблицы в списке параметров SP. Я получаю следующую ошибку при выполнении сценария развертывания:
Ошибка SQL01268: поставщик данных .Net SqlClient: Msg 137, уровень 16, состояние 1, процедура AppSearch, строка 36 должна объявить скалярную переменную "@platforms".
Переменная @ платформы здесь представляет собой определяемый пользователем тип таблицы, который определяется просто так:
CREATE TYPE [dbo].[IdList] AS TABLE
(
Id uniqueidentifier
);
Хранимая процедура, которую я создаю, выглядит следующим образом, которая использует UDDT в качестве одного из своих параметров:
PRINT N'Creating [dbo].[AppSearch]...';
GO
CREATE PROCEDURE [dbo].[AppSearch]
@nameContains nvarchar(30),
@descriptionContains nvarchar(max),
@isEditorsPick bit,
@dateAddedStart datetime,
@dateAddedEnd datetime,
@platforms IdList readonly
AS
begin
select
l.Id as [LibraryId],
l.Name as [LibraryName],
l.Description as [LibraryDescription],
c.Id as [CategoryId],
c.Name as [CategoryName],
c.Description as [CategoryDescription],
a.Id as [AppId],
a.Name as [AppName],
a.Description as [AppDescription],
a.IsEditorsPick as [AppIsEditorsPick],
a.DateAdded as [AppDateAdded],
p.Id as [PlatformId],
p.Name as [PlatformName],
p.Architecture as [PlatformArchitecture]
from
Library l
inner join Category c on l.Id = c.ParentLibraryId
inner join App a on c.Id = a.ParentCategoryId
inner join AppSupportedPlatform px on a.Id = px.AppId
inner join Platform p on px.PlatformId = p.Id
where
(@nameContains is not null and a.Name like '%' + @nameContains + '%')
and (@descriptionContains is not null and a.Description like '%' + @descriptionContains + '%')
and (@isEditorsPick is not null and a.IsEditorsPick = @isEditorsPick)
and (@dateAddedStart is not null and @dateAddedEnd is not null and a.DateAdded between @dateAddedStart and @dateAddedEnd)
and (@platforms is not null and p.Id in (select Id from @platforms))
end
GO
Сценарий развертывания выполняется в режиме SQLCMD. Любые идеи о том, почему я получаю вышеуказанную ошибку?
Заранее спасибо!