将变量设置为等于VARCHAR值不返回任何结果

时间:2014-04-25 15:52:53

标签: sql sql-server var

我有以下查询:

-- VARIABLE DECLARATION AND INITIALIZATION
DECLARE @BNP   VARCHAR;

SET @BNP   = '00408500';

/* 
BNP RESULTS
*/
DECLARE @T2 TABLE (
    VISIT              VARCHAR(20)
    , [BNP ORDER #]    VARCHAR(20)
    , [ORDER NAME]     VARCHAR(100)
    , VALUE            VARCHAR(150)
)

INSERT INTO @T2
SELECT
B.episode_no
, B.ord_seq_no
, B.obsv_cd_ext_name
, B.dsply_val

FROM (
    SELECT episode_no
    , ord_seq_no
    , obsv_cd_ext_name
    , dsply_val
    , ROW_NUMBER() OVER (
        PARTITION BY EPISODE_NO ORDER BY ORD_SEQ_NO DESC
        ) AS ROWNUMBER

    FROM smsmir.sr_obsv_curr

    WHERE obsv_cd = @BNP --'00408500'  -- BNP
    AND episode_no = '123456789dummy'
)B
WHERE ROWNUMBER = 1

SELECT * FROM @T2

当我不使用变量@BNP而是允许'00408500'我得到答案时,为什么不使用变量?另外,当我这样做时,我也会得到答案DECLARE @BNP VARCHAR(16);

谢谢

1 个答案:

答案 0 :(得分:1)

我看到的常见疑问是@BNP的VARCHAR声明中没有大小。

你能否改变

DECLARE @BNP VARCHAR

DECLARE @BNP VARCHAR(10)

并检查它是否有效?

编辑:我认为这可能是问题的原因 声明变量VARCHAR的ISTR分配它的大小= 1,因此它只存储第一个字符。通过明确指定适当的大小,我们确保整个字符串存储在变量中。