SQL问题,错误"无效的数据类型"

pgh*_*ech 23 sql t-sql sql-server stored-procedures sql-server-2008

使用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
);
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它时,我得到错误"参数或变量@variableName具有无效的数据类型"

ALTER PROCEDURE [dbo].[ImportServiceTypeRates]

(@ServiceTypes dbo.ServiceType)  --I have tried it without the "dbo." as well
Run Code Online (Sandbox Code Playgroud)

更新

所以我在我的变量声明中添加了"READONLY"

@ServiceTypes dbo.ServiceType READONLY
Run Code Online (Sandbox Code Playgroud)

我现在得到错误"参数@Servicetype不能被声明为READONLY,因为它不是一个表值参数"?什么?

我认为"CREATE TYPE ServiceType as TABLE"是什么声明它?

我还在Types\User-Defined Table Types\dbo.ServiceType中显示

sam*_*sam 110

我知道这是一个老帖子,但由于我遇到了同样的问题并且能够解决它,想到分享它.这是智能感知缓存问题,可以通过按ctrl+ shift+ R(编辑 - >智能感知 - >刷新本地缓存的快捷方式)来解决

  • 这应该标记为正确的anwser; 它对我来说就像一个魅力.Tks很多 (9认同)
  • @pghtech ...将此标记为答案 (5认同)
  • 哦,伙计,我多久希望我知道这条捷径.希望我能更多地赞成这一点 (5认同)
  • 那个问题让我发疯了,这个答案就是那个帮助我的人:)谢谢! (3认同)

p.c*_*ell 13

您必须将表值参数声明为READONLY.

ALTER PROCEDURE [dbo].[ImportServiceTypeRates]    
   @ServiceTypes dbo.ServiceType READONLY 
AS
   --your proc
Run Code Online (Sandbox Code Playgroud)

即使SQL Server强制您的表值参数是只读的,您还必须在存储过程参数列表中显式声明它.

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

  • @pghtech:这是一个运行时错误,还是带有红色波浪形的SSMS和带有该错误的悬停工具提示?我在我的测试环境中完全按照你的方式重新编写,我确实看到同样的错误,只在工具提示中.执行`ALTER`查询时,它执行正常,没有任何问题. (3认同)

Bru*_*tin 9

只要您不在存储过程中声明除表类型之外的任何参数,您将在Intellisense中获得红色波浪线错误,但应成功创建或更改存储过程.这似乎是一个不固定的Microsoft错误.