web-dev-qa-db-ja.com

エラー「無効なデータ型」のSQL問題

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にも表示されています

23
pghtech

テーブル値パラメーターをREADONLYとして宣言する必要があります。

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

SQL Serverはテーブル値パラメーターを読み取り専用に強制しますが、ストアドプロシージャのパラメーターリストで明示的に宣言する必要もあります。

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

13
p.campbell

これは古い投稿であることは知っていますが、同じ問題が発生して解決できたため、共有することを考えました。これはIntelliSenseキャッシュの問題であり、押して解決できます ctrl+shift+R (編集-> IntelliSense->ローカルキャッシュの更新のショートカット)

114
sam

ストアドプロシージャでテーブルタイプ以外のパラメーターを宣言しない限り、Intellisenseで赤い波線のエラーが表示されますが、ストアドプロシージャは正常に作成または変更されます。これは未修正のMicrosoftバグのようです。

9
Bruce Patin