使用SQL 2008
所以我创建了一个用户定义类型:
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”是宣称它的原因???
我也在Types \ User-Defined Table Types \ dbo.ServiceType
中显示答案 0 :(得分:104)
我知道这是一个老帖子,但由于我遇到了同样的问题而且能够解决它,想到分享它。这是智能感知缓存问题,可以通过按 ctrl + shift + R (编辑的快捷方式 - >智能感知 - >刷新来解决)本地缓存)
答案 1 :(得分:12)
您必须将表值参数声明为READONLY
。
ALTER PROCEDURE [dbo].[ImportServiceTypeRates]
@ServiceTypes dbo.ServiceType READONLY
AS
--your proc
即使SQL Server强制您的表值参数是只读的,您还必须在存储过程参数列表中显式声明它。
答案 2 :(得分:9)
只要您不在存储过程中声明除表类型之外的任何参数,您将在Intellisense中获得红色波浪线错误,但应成功创建或更改存储过程。这似乎是一个不修复的Microsoft错误。