2017-02-27 36 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