日期:2014-05-17  浏览次数:20512 次

sql 存储过程问题---纠结阿
各位帮忙看看,唉,弄个存储快抓狂了,
BEGIN
DECLARE @sql NVARCHAR(500);
SET NOCOUNT ON;
SET @sql = 'select wo.ProductName,w.WorkOrder, MIN(w.MoveInTime) as MIN_MoveInTime, MAX(w.moveouttime) as MAX_MoveOutTime, ';
SET @sql += 'CAST(DATEDIFF(HOUR, MIN(w.MoveInTime), MAX(w.moveouttime)) * 1.0/24 as DECIMAL(6,4)) as CycleTime ';
SET @sql +='from WaferHistory w WITH(NOLOCK), WorkOrder wo WITH(NOLOCK) where ';
SET @sql +='wo.completedate >=''' + @cls_time_DateFrom + ''' ';
SET @sql +='and wo.completedate <= '''+ @cls_time_DateTo+''' ';
SET @sql +='and wo.WorkOrderType = '''+ @wotype +''' ';
SET @sql +='and wo.WorkOrderID = w.WorkOrder ';
--if @productnames='Fales'
SET @sql +='and ''' + @productnames + ''' like '%'+wo.ProductName+'%' ';
SET @sql +='group by wo.productname,w.WorkOrder ';
SET @sql +='order by ProductName, w.WorkOrder ';    
    exec(@sql);
end


错误提示如下:
消息 402,级别 16,状态 1,过程 SP_Get_Product_CycleTime,第 19 行
数据类型 varchar 和 varchar 在 modulo 运算符中不兼容。

------解决方案--------------------
数据类型不对呗
------解决方案--------------------
% 为什么带引号。
先别exec 先print后执行下看看哪里写的不对。
------解决方案--------------------
@cls_time_DateFrom是什么类型
------解决方案--------------------
@sql +='and ''' + @productnames + ''' like ''%''+wo.ProductName+''%'' ';
------解决方案--------------------
注:把非字符串类型转为字符串再加减
BEGIN
    DECLARE @sql NVARCHAR(500);
    SET NOCOUNT ON;        
        SET @sql = 'select wo.ProductName,w.WorkOrder, MIN(w.MoveInTime) as MIN_MoveInTime, MAX(w.moveouttime) as MAX_MoveOutTime, ';                
        SET @sql += 'CAST(DATEDIFF(HOUR, MIN(w.MoveInTime), MAX(w.moveouttime)) * 1.0/24 as DECIMAL(6,4)) as CycleTime ';
        SET @sql +='from WaferHistory w WITH(NOLOCK), WorkOrder wo WITH(NOLOCK) where ';            
        SET @sql +='wo.completedate >=''' + @cls_time_DateFrom + ''' ';
        SET @sql +='and wo.completedate <= '''+ @cls_time_DateTo+''' ';
        SET @sql +='and wo.WorkOrderType = '''+ @wotype +''' ';
        SET @sql +='and wo.WorkOrderID = w.WorkOrder&nb