[解決済み] オペランドタイプの衝突
質問
長いストアドプロシージャがあるのですが、プロシージャを実行すると以下のエラーが発生します。
Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(max) is incompatible with sql_variant
そこで、トラブルシューティングのために、問題のある箇所とコードを印刷しました。
SELECT 'Name' ,
7 ,
CASE WHEN 'varchar' = 'varbinary'
THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr([Name])), 'X', 'x')
ELSE CONVERT(VARCHAR(4000), [Name])
END , 'varchar'
FROM ref.dbo.datatables
WHERE id = 12
ORDER BY [ID]
そのため、上記のステートメントを実行すると、次のようなエラーが発生します。
Msg 206, Level 16, State 2, Line 1
Operand type clash: varchar(max) is incompatible with sql_variant
ref.dbo.datatables テーブルの Name のデータ型は Varchar(MAX) です。
この問題を解決するにはどうしたらよいでしょうか。
お答えください。
これが、私がやった仕事です。
SELECT 'Name',
7,
CASE WHEN 'varchar' = 'varbinary'
THEN REPLACE(UPPER(sys.fn_sqlvarbasetostr(CONVERT(VARBINARY,[Name]))),'X','x')
ELSE CONVERT(VARCHAR(4000),[Name])
END,
'varchar'
FROM ref.dbo.datatables
WHERE id = 12
ORDER BY [ID]
解決方法は?
このエラーは正しいです。
VARCHAR(MAX)
を
sql_variant
. もし
Name
は
VARCHAR(MAX)
のような)互換性のある型に変換する必要があります。
VARCHAR(8000)
のパラメータとして渡すためです。
sys.fn_sqlvarbasetostr()
msdnを参照してください。
sql_variant オブジェクトは、text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、timestamp、および Microsoft .NET Framework 共通言語ランタイム(CLR)ユーザー定義型以外のあらゆる SQL Server データ型のデータを保持することが可能です。sql_variantデータのインスタンスは、その基礎となるデータ型としてsql_variantを持つこともできません。
の機能が必要な場合
sys.fn_sqlvarbasetostr()
データを失うことなくcolをダウンコンバートすることができない場合、その関数の独自のバージョンをロールバックする必要があるかもしれません。CLRは良い方法でしょう。
関連
-
[解決済み] FOREIGN KEY制約で参照されているため、テーブルを切り捨てることができないのですか?
-
[解決済み] データベースのトランザクションログが満杯です。ログの領域が再利用できない理由を調べるには、sys.databases の log_reuse_wait_desc カラムを参照してください。
-
[解決済み] 階層テーブルの設計
-
[解決済み] SQL Agent を使用して SSIS パッケージを実行する際の問題 - "DTSER_FAILURE(1)" で失敗します。
-
[解決済み] SQL Server : ログインに成功しましたが、「データベース [dbName] にアクセスできません。(ObjectExplorer) "と表示されました。
-
[解決済み] SQL Server : ログインに成功しましたが、「データベース [dbName] にアクセスできません。(ObjectExplorer) "と表示されました。
-
[解決済み] SQLでNaN値をNULLに、またはNaNを0に変換する
-
[解決済み] SQL Serverのタイムスタンプ列をdatetime形式に変換する方法
-
[解決済み] SQL Serverでforeachを記述する方法とは?
-
[解決済み] 日付から年内の週番号を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SQL Server データベース復元エラー:指定されたキャストは有効ではありません。(SqlManagerUI)
-
[解決済み】PRIMARY KEY制約に違反しました。オブジェクトに重複したキーを挿入できない
-
[解決済み] 特別なプリンシパルdbo.を使用することはできません。エラー 15405
-
[解決済み] 階層テーブルの設計
-
[解決済み] sp_columnsが結果を返さないのはなぜですか?
-
[解決済み] SSISで新しいレコードを挿入する前に、宛先テーブルを空にするにはどうすればよいですか?
-
[解決済み] データ損失の可能性があるため、スキーマの更新を終了します。
-
[解決済み] Sqlサーバーに制約が存在するかどうかを確認する方法は?
-
[解決済み] UPDATEエラーです。"REPLACEの引数1の引数データ型textは無効です"
-
[解決済み] 文字列から特定の文字を削除する