SQL Server 2012:具有返回零行的变量的查询
当我硬编码值时,此查询以所需方式返回输出,但当我使用@PAYMENT\u凭证\u NUMBER变量而不是硬编码数据“REVIEW\u PAYMENT\u凭证\u 31”时,它不会返回任何行SQL Server 2012:具有返回零行的变量的查询,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,当我硬编码值时,此查询以所需方式返回输出,但当我使用@PAYMENT\u凭证\u NUMBER变量而不是硬编码数据“REVIEW\u PAYMENT\u凭证\u 31”时,它不会返回任何行 /* Not working */ DECLARE @PAYMENT_VOUCHER_NUMBER VARCHAR(15) = NULL; Set @PAYMENT_VOUCHER_NUMBER ='REVIEW_PAYMENT_VOUCHER_31'; SELECT REF_NUM ,CASE
/* Not working */
DECLARE @PAYMENT_VOUCHER_NUMBER VARCHAR(15) = NULL;
Set @PAYMENT_VOUCHER_NUMBER ='REVIEW_PAYMENT_VOUCHER_31';
SELECT REF_NUM
,CASE
WHEN RW_PT_VOUCHER_NUMBER = @PAYMENT_VOUCHER_NUMBER
THEN 1
WHEN ML_PT_VOUCHER_NUMBER = @PAYMENT_VOUCHER_NUMBER
THEN 2
END FEE_TYPE
FROM PROC_FEES_PYMTS
WHERE RW_PT_VOUCHER_NUMBER LIKE @PAYMENT_VOUCHER_NUMBER
OR ML_PT_VOUCHER_NUMBER LIKE @PAYMENT_VOUCHER_NUMBER;
/* End of not working section */
/* This works fine */
SELECT REF_NUM
,CASE
WHEN RW_PT_VOUCHER_NUMBER = 'REVIEW_PAYMENT_VOUCHER_31'
THEN 1
WHEN ML_PT_VOUCHER_NUMBER = 'REVIEW_PAYMENT_VOUCHER_31'
THEN 2
END FEE_TYPE
FROM PROC_FEES_PYMTS
WHERE RW_PT_VOUCHER_NUMBER LIKE 'REVIEW_PAYMENT_VOUCHER_31'
OR ML_PT_VOUCHER_NUMBER LIKE 'REVIEW_PAYMENT_VOUCHER_31';
架构信息:
PROC_FEES_PYMTS -Table
REF_NUM - [varchar](15) NOT NULL
RW_PT_VOUCHER_NUMBER - [varchar](100) NULL
ML_PT_VOUCHER_NUMBER - [varchar](100) NULL
理想情况下,这应该返回一行。但当使用变量时,它不会返回任何行
/* Not working */
DECLARE @PAYMENT_VOUCHER_NUMBER VARCHAR(15) = NULL;
Set @PAYMENT_VOUCHER_NUMBER ='REVIEW_PAYMENT_VOUCHER_31';
SELECT REF_NUM
,CASE
WHEN RW_PT_VOUCHER_NUMBER = @PAYMENT_VOUCHER_NUMBER
THEN 1
WHEN ML_PT_VOUCHER_NUMBER = @PAYMENT_VOUCHER_NUMBER
THEN 2
END FEE_TYPE
FROM PROC_FEES_PYMTS
WHERE RW_PT_VOUCHER_NUMBER LIKE @PAYMENT_VOUCHER_NUMBER
OR ML_PT_VOUCHER_NUMBER LIKE @PAYMENT_VOUCHER_NUMBER;
/* End of not working section */
/* This works fine */
SELECT REF_NUM
,CASE
WHEN RW_PT_VOUCHER_NUMBER = 'REVIEW_PAYMENT_VOUCHER_31'
THEN 1
WHEN ML_PT_VOUCHER_NUMBER = 'REVIEW_PAYMENT_VOUCHER_31'
THEN 2
END FEE_TYPE
FROM PROC_FEES_PYMTS
WHERE RW_PT_VOUCHER_NUMBER LIKE 'REVIEW_PAYMENT_VOUCHER_31'
OR ML_PT_VOUCHER_NUMBER LIKE 'REVIEW_PAYMENT_VOUCHER_31';
这个变量有问题吗?或者我在这个查询中有错误吗?当您将
'REVIEW\u PAYMENT\u conception\u 31'
加载到您得到的varchar(15)
中时
“审核付款”
您的字符串被截断为15个字符。解决此问题的第一步是打印变量值
使用类似于
VARCHAR(100)
的方法来代替可变长度是问题所在。它无法容纳您提供的输入。为了安全起见,使用一些大数字或最大值。同样,对于like,您应该使用%符号或使用相等(=)运算符
DECLARE @PAYMENT_VOUCHER_NUMBER VARCHAR(MAX) = 'REVIEW_PAYMENT_VOUCHER_31';
Select REF_NUM,
CASE
WHEN RW_PT_VOUCHER_NUMBER = @PAYMENT_VOUCHER_NUMBER Then 1
WHEN ML_PT_VOUCHER_NUMBER = @PAYMENT_VOUCHER_NUMBER Then 2
END FEE_TYPE
From PROC_FEES_PYMTS
Where
RW_PT_VOUCHER_NUMBER like '%' + @PAYMENT_VOUCHER_NUMBER + '%' OR ML_PT_VOUCHER_NUMBER like '%' + @PAYMENT_VOUCHER_NUMBER + '%'
谢谢你的指导。你说得对。