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にも表示されています
テーブル値パラメーターをREADONLY
として宣言する必要があります。
ALTER PROCEDURE [dbo].[ImportServiceTypeRates]
@ServiceTypes dbo.ServiceType READONLY
AS
--your proc
SQL Serverはテーブル値パラメーターを読み取り専用に強制しますが、ストアドプロシージャのパラメーターリストで明示的に宣言する必要もあります。
これは古い投稿であることは知っていますが、同じ問題が発生して解決できたため、共有することを考えました。これはIntelliSenseキャッシュの問題であり、押して解決できます ctrl+shift+R (編集-> IntelliSense->ローカルキャッシュの更新のショートカット)
ストアドプロシージャでテーブルタイプ以外のパラメーターを宣言しない限り、Intellisenseで赤い波線のエラーが表示されますが、ストアドプロシージャは正常に作成または変更されます。これは未修正のMicrosoftバグのようです。