作为 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
是一个可行的选择。