我很难过这个。可能是一个简单的问题,但我无法解决这个问题。
我有一个简单的查询,我将结果集合并在一起,以便根据不同的标准操作数据。
我有一个参数,所以最终可以成为SSRS报告。
这是我的精简查询...
有3个参数:StartDate,EndDate和Supplier。
StartDate和EndDate是数据类型日期,Supplier是char(7)
当我运行查询并将参数设置为'1040'时,我得不到结果
DECLARE @STARTDATE AS DATE
DECLARE @ENDDATE AS DATE
DECLARE @SUPPLIER AS CHAR
SET @STARTDATE = '2013-12-01'
SET @ENDDATE = '2013-12-31'
SET @SUPPLIER = '1040'
SELECT *
FROM InvMovements AS AA
JOIN InvMaster AS BB
ON AA.StockCode = BB.StockCode
JOIN ApSupplier AS CC
ON CC.Supplier = BB.Supplier
WHERE MovementType = 'I'
AND TrnType = 'T'
AND TrnQty < 0
AND Warehouse = 'ZC'
AND CC.Supplier = @SUPPLIER
AND EntryDate BETWEEN @STARTDATE AND @ENDDATE
现在,当我更改WHERE子句以显示任何供应商(如参数(CC.Supplier LIKE'%'+ @SUPPLIER +'%'))时,我得到了这些结果
Supplier StockCode Warehouse EntryDate TrnType TrnQty
1000 317012 ZC 2013-12-06 T 18.000
1040 320062 ZC 2013-12-06 T 8.000
我们只有4个角色供应商。
如果我手动将供应商设置为CC.Supplier ='1040',我会得到我正在寻找的确切结果集。我在SSRS中尝试过它,我得到了相同的结果。
有什么想法吗?这似乎是一个愚蠢的问题,但我似乎无法弄清楚为什么会发生这种情况。
答案 0 :(得分:3)
如果你这样做:
DECLARE @SUPPLIER AS CHAR
然后你的变量正好一个字符长。
所以当你做分配时
SET @SUPPLIER = '1040'
你真的只是将1
存储在该变量中。
定义时,您需要为CHAR
和VARCHAR
提供明确的长度!您应该养成这样做的习惯 - 当您声明变量,向存储过程或函数声明参数时,或者在{{1}中使用CHAR
或VARCHAR
时}或CAST
情况 - 定义长度!
CONVERT
然后按预期工作。