Ошибка SQL с ошибкой "Недопустимый тип данных"

Использование SQL 2008

Итак, я создал тип User Defined:

CREATE TYPE dbo.ServiceType AS TABLE (
[TO_ZONE] varchar(30) NOT NULL,
[FROM_ZONE] varchar(30) NOT NULL,
[RATE] decimal(14,2) NOT NULL,
[SERVICE_TYPE] varchar(255) NOT NULL
);

И когда я пытаюсь использовать его, я получаю ошибку "параметр или переменная @variableName имеет недопустимый тип данных"

ALTER PROCEDURE [dbo].[ImportServiceTypeRates]

(@ServiceTypes dbo.ServiceType)  --I have tried it without the "dbo." as well

Обновление

Итак, я добавил "READONLY" к объявлению переменной

@ServiceTypes dbo.ServiceType READONLY

И теперь я получаю сообщение об ошибке "Параметр @Servicetype не может быть объявлен READONLY, потому что он не является параметром таблицы"? ЧТО?

Я думал, что "CREATE TYPE ServiceType as TABLE" был тем, что было объявлено таким образом

Я также показываю в типах\Определенных пользователем типах таблиц\dbo.ServiceType

Ответы

Ответ 1

Вы должны объявить свой табличный параметр как READONLY.

ALTER PROCEDURE [dbo].[ImportServiceTypeRates]    
   @ServiceTypes dbo.ServiceType READONLY 
AS
   --your proc

Несмотря на то, что SQL Server заставляет параметр table-value быть доступен только для чтения, вы также должны явно объявить его в списке параметров хранимой процедуры.

http://msdn.microsoft.com/en-us/library/bb675163.aspx

Ответ 2

Я знаю, что это старый пост, но так как я столкнулся с той же проблемой и смог ее решить, подумал об обмене ею. Это проблема с кешем IntelliSense и может быть решена нажатием ctrl + shift + R (ярлык для Edit → IntelliSense → Обновить локальный кэш)

Ответ 3

Пока вы не объявляете какие-либо параметры, отличные от типа таблицы в хранимой процедуре, вы получите красную ошибку squiggly line в Intellisense, но хранимая процедура должна быть создана или изменена успешно. Это, по-видимому, нефиксированная ошибка Microsoft.