SQL クエリの一部として、次のコードを取得しました。
INSERT INTO [Database]
SELECT DISTINCT @ssId
FROM [Document_Map]
WHERE (LabelId IN (SELECT Tokens
FROM StringSplitter(@sortValue, '|', 1))
このコード@SortValue
は、整数 (LabelId
は int でもあります) または区切り文字で区切られた整数 (たとえば、SortValue 420|421| は 420 および 421 と比較されます) である限り正常に機能します。ただし、 の非整数値を含む機能を追加しています@sortValue
。例: 420、ABC、および 421 と比較する420|ABC|421|
必要があります。
心配はいらない、と私は思った。そのクエリの最後の行を変更するだけです。
(LabelId IN (SELECT Tokens FROM StringSplitter(@sortValue, '|', 1)) OR
StringId IN (SELECT Tokens FROM StringSplitter(@sortValue, '|', 1)))
残念ながら、@sortValue
文字を入力するとエラーが発生します。の向こう側には決して到達しませんでしたor
。
いろいろ調べた結果、SQL が StringSplitter 関数からの文字列結果をキャストして、LabelId と比較していると最終的に判断しました。文字列の結果に数値のみが含まれることが保証されている場合は問題ありませんが、SQL は (当然のことながら) 数値以外の文字列を int にキャストすることを拒否し、エラーをスローします。
必要な機能を維持しながら、このエラーを回避する最も簡単な方法は何ですか? データベースの相互作用のため、タイプの変更がLabelId
実行可能なオプションであるかどうかはわかりません。