转换日期时出现SQL Server错误

时间:2015-03-06 11:30:06

标签: sql-server

我在SQL Server中有一个查询,检查数据是否已存在于数据库中,如果数据不存在,则会将数据插入数据库。

以下是我的查询:

IF EXISTS
(SELECT 
    DocumentNo,
    DocumentDate,
    CustomerAccountName,
    PostalName,
    RequestedDeliveryDate,
    SupplierDocumentNo,
    SupplierAccountName,
    DispatchName
 FROM 
    SalesOrders
 WHERE 
    (DocumentNo = '0000233555'))
    UPDATE SalesOrders
    SET RequestedDeliveryDate ='2015-04-16',
        SupplierDocumentNo ='',
        SupplierAccountName = '',
        DispatchName =''
    WHERE 
        (DocumentDate = '0000233555') 

ELSE

    INSERT INTO SalesOrders (DocumentNo, DocumentDate, 
                             CustomerAccountName, PostalName, 
                             RequestedDeliveryDate, SupplierDocumentNo, 
                             SupplierAccountName, DispatchName)
    VALUES ('0000233555', '2015-03-05',
            'Company name', 'Company name',
            '2015-04-16', '',
            '', '')

但是我收到了这个错误。

  

Msg 241,Level 16,State 1,Line 12
  从字符串转换日期和/或时间时转换失败。

以下是表格的设计方法。

        column name          Data type      Allow Null
              ID                int         Unchecked
        DocumentNo           varchar(50)    Checked
        DocumentDate           date         Checked
        CustomerAccountName  varchar(100)   Checked
        PostalName           varchar(100)   Checked
        RequestedDeliveryDate  date         Checked
        ShipmentType         varchar(50)    Checked
        Shipped                int          Checked
        Collected              int          Checked
        OrderComplete        tinyint        Checked
        SupplierDocumentNo   varchar(100)   Checked
        SupplierAccountName  varchar(100)   Checked
        DispatchName         varchar(100)   Checked
        HiddenStatus         int            Checked

我真的不确定为什么我会收到此错误,我们将非常感谢任何帮助

3 个答案:

答案 0 :(得分:8)

WHERE(DocumentDate ='0000233555')< - 这一定是错的

答案 1 :(得分:3)

我认为WHERE (DocumentDate = '0000233555')应为WHERE (DocumentNo = '0000233555')。这里错字。

答案 2 :(得分:1)

从字符串值比较或插入日期/数据时您必须将其转换为有效的日期/日期时间格式。 SQL Server不知道您以什么格式提供字符串中的日期值。 让他知道您应该使用CAS or CONVERT函数。

修改

而且,正如之前发布的那样,你的查询中可能有拼写错误:

(DocumentDate = '0000233555')

应该是

(DocumentNo = '0000233555')