(SELECT varchar ...)中的int是否有效?

时间:2011-07-21 12:27:26

标签: tsql

我正在尝试修改一些代码,这些代码正在为正在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))

问题是我无法运行代码,因为我只有代码,而不是运行它的权限。

1 个答案:

答案 0 :(得分:0)

TSQL隐式转化中,VARCHAR会被投放到INT,反之亦然。

因此,如果r.kommunenrINTdbo.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