我正在尝试修改一些代码,这些代码正在为正在Business Intelligence Development Studio(Microsoft Reporting Services)中构建的报表生成模型。
我想知道这是否有必要?
WHERE (convert(varchar,R.Kommunenr) COLLATE DATABASE_DEFAULT IN (SELECT Item FROM dbo.Split('"+ @kommune+ "', ',') AS Split_1))"
$ kommune是一个像这样构建的文本:“kommune1,kommune2,kommune3,...”
可以检查int(R.kommunenr)是否为IN(SELECT Item FROM dbo.Split('“@ @ kommune +”',',')AS Split_1)我认为它是一个varchar。喜欢这个
WHERE (R.Kommunenr IN (SELECT Item FROM dbo.Split('"+ @kommune+ "', ',') AS Split_1))
问题是我无法运行代码,因为我只有代码,而不是运行它的权限。
答案 0 :(得分:0)
在TSQL
隐式转化中,VARCHAR
会被投放到INT
,反之亦然。
因此,如果r.kommunenr
为INT
且dbo.split
返回的VARCHAR
无法转换为INT
,则您的第二个查询将失败。
如果您想从r.kommunenr
上的索引中受益,您可以尝试这样做:
SELECT *
FROM r
WHERE kommunenr IN
(
SELECT CASE IsNumeric(item)
WHEN 1
THEN
CASE
WHEN CAST(item AS FLOAT) = CAST(CAST(item AS FLOAT) AS INT)
THEN
CAST(CAST(item AS FLOAT) AS INT)
END
END
FROM dbo.split(@kommune) split1
)
这将处理像1E8
这样的边缘情况,它是数字但不能直接转换为INT
。