exec GetOrderDetailsCount 1,0 执行这一句错误时 
报将 varchar 值 ' 1=1and GoodsCode IN (select ID from Agoods where TypeID=' 转换为数据类型为 int 的列时发生语法错误drop proc GetOrderDetailsCountCREATE PROC GetOrderDetailsCount
@TypeID INT,
@WareHouseID INT
--@Code VARCHAR(50),
--@Name VARCHAR(50)
AS
BEGIN
DECLARE
@nCount VARCHAR(50),--货物编码
@nCount1 VARCHAR(50),--货物名称
@nCount2 VARCHAR(50),--型号
@nCount3 VARCHAR(50),--规格
@nCount4 VARCHAR(50),--单位
@nCount5 DECIMAL,--成本价
@nCount6 DECIMAL,--数量
@nCount7 DECIMAL,--库存金额
@nCount8 INT,--仓库ID
@nCount9 INT,--货物类型ID
@where varchar(500)
--创建一个临时表
CREATE TABLE #Temp
(
Code VARCHAR(50),--货物编号
Name VARCHAR(50),--货物名称
Model VARCHAR(50),--型号
Spec VARCHAR(50),--规格
UnitName VARCHAR(50),--单位
price DECIMAL,--成本价
QualiNo DECIMAL,--数量
        WareMoney DECIMAL,--库存金额
        WarehouseID INT,--仓库ID
        TypeID INT--货物类型
) DECLARE @v_temp VARCHAR(20)--采购订单表
SET @v_temp = isnull(@v_temp,'')
        
SET @where=' 1=1'
IF(@TypeID!=0)
        BEGIN
SET @where=@where+  'and GoodsCode IN (select ID from Agoods where TypeID='+@TypeID+')'
END IF (@WareHouseID!=0)
BEGIN
SET @where=@where+' and OrderID IN (select OrderID from GoodsInCome where WarehouseID in(select id from Warehouse where id='+@WareHouseID+'))'
END
        --IF(@Code!=0)
       -- BEGIN
                --SET @where=@where+ ' and GoodsCode IN(select ID from Agoods where Code='+@Code+')'
       -- END
       -- IF(@Name!=0)
       -- BEGIN
                --SET @where=@where+ ' and GoodsCode IN(select ID from Agoods where Name='+@Name+')'
       -- END
        
DECLARE vp_i CURSOR FOR  SELECT DISTINCT goodscode from OrderDetails where IsTest=1 and @where='1=1'
OPEN vp_i
FETCH NEXT FROM vp_i INTO @v_temp WHILE @@FETCH_STATUS = 0 
BEGIN
SET @nCount=NULL
SET @nCount1=NULL
SET @nCount2=NULL
SET @nCount3=NULL
SET @nCount4=NULL
SET @nCount5=NULL
SET @nCount6=NULL
       SET @nCount7=NULL
       SET @nCount8=NULL
       SET @nCount9=NULL  
       SET @nCount=(select Code from Agoods where ID=@v_temp)--货物编号
       SET @nCount1=(select name from Agoods where ID=@v_temp)--货物名称
SET @nCount2=(select Model from Agoods where ID=@v_temp)--型号
SET @nCount3=(select Spec from Agoods where ID=@v_temp)--规格
        SET @nCount4=(select name from GoodsUnit where ID IN (select UnitID from Agoods where ID=@v_temp))--单位
        SET @nCount5=(select price from OrderDetails where GoodsCode=@v_temp)--成本价
SET @nCount6=(SELECT SUM(QualiNo-ActualSales) AS QualiNo FROM OrderDetails where GoodsCode=@v_temp)--根据货物ID统计入库数量
                        -- SET @nCount7=(select WarehouseID from GoodsInCome where OrderID IN (select OrderID from OrderDetails where GoodsCode=@v_temp))--仓库ID
                        --SET @nCount8=(select TypeID from Agoods where ID=@v_temp)--货物类型

--判断是否为一条记录,如果一条记录无法进行统计
     INSERT #Temp(Code,Name,Model,Spec,UnitName,price,QualiNo,WareMoney)
VALUES(@nCount,@nCount1,@nCount2,@nCount3,@nCount4,@nCount5,@nCount6,(@nCount6*@nCount5)) 
FETCH NEXT FROM vp_i INTO @v_temp
END
--返回结果
SELECT Code,Name,Model,Spec,UnitName,price,QualiNo,WareMoney,WarehouseID,TypeID FROM #Temp      
--处理游标后事
CLOSE vp_i
DEALLOCATE vp_i
END

解决方案 »

  1.   

    SET @where=@where+  'and GoodsCode IN (select ID from Agoods where TypeID='+@TypeID+')' 
    @TypeID是INT型的,字符型和INT相加会把字符型先转换成INT型的,这里应该把@TypeID转换成字符型
      

  2.   

    SET @where=@where+  'and GoodsCode IN (select ID from Agoods where TypeID='+@TypeID+')' 改成 SET @where=@where+  ' and GoodsCode IN (select ID from Agoods where TypeID='+@TypeID+')' 
    注意  and 前的空格.
      

  3.   


    --试试
    SET @where=@where+  ' and GoodsCode IN (select ID from Agoods where TypeID=@TypeID)'