2选择语句,1变量

时间:2018-05-22 13:22:40

标签: sql sql-server

处理一个项目,该项目需要2个不同的表格,将一个数字分配给一个公共变量。我可以得到0和1工作,但值2将无法工作。我错过了什么?

declare @rtval int
, @primarykey nvarchar(25)

BEGIN TRY
BEGIN

set @primarykey = ( select top 1 2
                from dbo.firsttable ftv
                where ftv.field = @ftvID
                and ftv.Target like 'CASE1'
                )

set @primarykey = ( select top 1 1
                from dbo.secondtable fv
                join dbo.external ext on fv.external1 = ext.xID
                where fv.yID = @yID
                and fv.Target1 like 'CASE2'
                )

if ISNUMERIC(@primarykey) = 1
begin set @rtval = convert (int, @primarykey)
end

else

begin set @rtval = 0
end

我可以让0和1工作,但永远不会2.我有什么东西丢失了吗?

1 个答案:

答案 0 :(得分:0)

我不确定此代码将如何返回2。我想你想要这样的......

DECLARE @rtval INT =  CASE
        WHEN EXISTS(
            SELECT  *
            FROM    dbo.firsttable ftv
            WHERE   ftv.field = @FTVID
            AND     ftv.target LIKE 'CASE1'
            ) THEN 2
        WHEN EXISTS(
            SELECT  *
            FROM    dbo.secondtable fv
            JOIN    dbo.external ext on fv.external1 = ext.xID
            WHERE   fv.yID = @yID
            AND     fv.Target1 LIKE 'CASE2'
            ) THEN 1
        ELSE
            0
    END ;

如果您使用的是旧版本的SQL Server,则可能需要单独从SET或SELECT声明@rtval以填充它。

我假设您在检查CASE2之前要检查CASE1。如果没有,只需颠倒WHEN条款的顺序。

另外,在没有任何通配符的情况下执行LIKE是一个直接的相等检查,因此用LI替换LIKE可能更有效。