2017-02-27 91 views
1

以下查询有什么问题?我找不到错误。任何人都可以帮助 我这个问题?SQL Server中如果不存在查询中的错误

IF (NOT EXISTS(SELECT * 
       FROM chennai_metro_data 
       WHERE TIME1 ='09:00' AND DATE1 ='1-23-2017')) 
BEGIN 
    INSERT INTO chennai_metro_data 
    VALUES (2021700002,'1-23-2017','09:00',1,0,555555) 
END 
ELSE 
BEGIN 
    UPDATE chennai_metro_data 
    SET CUMFLOW = 555555 
    WHERE TIME1 = '09:00' AND DATE1 = '1-23-2017' 
END 

我得到这个错误:

Msg 206, Level 16, State 2, Line 1
Operand type clash: int is incompatible with date

+3

作为一种最佳实践,您应该**总是**定义在使用'INSERT'时插入的列**列表**,这有助于避免很多问题! –

+1

另外,对于日期数据类型的字符串表示,请使用yyyy-mm-dd或yyyymmdd。 –

+0

@marc_s它的工作原理!谢谢。根据你的建议,我添加了列表。 – Lingaraj

回答

4

最佳做法是,你应该总是定义你要插入的列的列表使用INSERT时到 - 这有助于避免很多问题!

而且也包括:日期,不依赖于任何语言&区域设置,尝试使用ISO-8601格式 - YYYYMDDD只是日期(没时间),或YYYY-MM-DDTHH:MM:SS日期&时间。

那么试试这个代码:

INSERT INTO chennai_metro_data(col1, col2, ...., colN) 
VALUES (2021700002, '20170123', '09:00', 1, 0, 555555) 

,并从该表是要将数据插入到您的实际列名更换col1 thorugh colN

+1

JUst添加时,如果在没有列出列的插入中出现adat不匹配错误,那么几乎肯定会插入insert中的列的顺序与表中的列顺序不同。这是总是添加列列表非常重要的一个原因。另外,有时人们实际上会更改表格中的列顺序。他们不应该(因为然后东西休息),但他们不应该。 – HLGEM