更新查询失败'0'行受影响

时间:2015-06-02 12:48:55

标签: sql-server ado.net

我正在尝试运行此查询,但查询一直放弃我:

Update StockInvoiceInfo set Quantity = Quantity - 2  where p_id = 5 AND ProductDate = convert(Cast('31-5-2015' as datetime)) ;

运行此代码后,它会返回以下错误:

  

'31 -5-2015'附近的语法不正确

ProductDate列的数据类型为Date。我正在使用Sql Server 2012

4 个答案:

答案 0 :(得分:3)

您使用过Convert个函数,但未提供参数。此处也不需要此功能。还要注意日期格式。我已将其更改为标准格式:

Update StockInvoiceInfo set Quantity = Quantity - 2  
where p_id = 5 AND ProductDate = Cast('2015-05-31' as datetime)

答案 1 :(得分:0)

使用CAST('5-31-2015' as DATETIME)

答案 2 :(得分:0)

使用上面的更新语句,您开始转换但语法不完整 这里转换语法

  Update StockInvoiceInfo 
set Quantity = Quantity - 2  
where p_id = 5
 AND ProductDate = convert(datetime,Cast('31-5-2015' as varchar),103) ;

答案 3 :(得分:0)

如果你要做的就是比较一个Sql Date,那么只需使用main.m之类的不可知格式,或者更容易阅读'20150531'。根本不需要演员阵容或转换,即

'2015-05-31'

但是,如果WHERE ... AND ProductDate = '2015-05-31' 不是日期,而是ProductDate数据类型之一,并且您希望在同一天的任何时间更新,那么我相信您正在寻找某些东西像:

*DATETIME*

然而,由于该条款不太可能是SARGable,因此表现将会很糟糕。你最好只做:

Update StockInvoiceInfo 
set Quantity = Quantity - 2  
where 
  p_id = 5 
  AND CAST(ProductDate AS DATE) = '2015-05-31';

(抵制在两者之间使用的诱惑,或像':23:59:59'那样的黑客攻击,因为会有数据角落的情况会咬你)