Ошибка 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.