我有以下查询:
-- 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);
谢谢
答案 0 :(得分:1)
我看到的常见疑问是@BNP的VARCHAR声明中没有大小。
你能否改变
DECLARE @BNP VARCHAR
到
DECLARE @BNP VARCHAR(10)
并检查它是否有效?
编辑:我认为这可能是问题的原因 声明变量VARCHAR的ISTR分配它的大小= 1,因此它只存储第一个字符。通过明确指定适当的大小,我们确保整个字符串存储在变量中。