消息8114:在SQL Server 2012中将数据类型时间戳转换为日期时出错

时间:2017-01-17 09:47:02

标签: sql sql-server-2012

我们团队中有人在几年前写过以下问题

subprocess.popen.communicate(input)

现在这个exec sp_getDocumentCategoriesCodesCtrl返回一个时间戳,然后存储在上面创建的临时表的datetime类型列中。我们从未收到过任何问题,直到最近客户提出了一个问题,指出该页面崩溃并显示一条错误消息,指出"错误将数据类型时间戳转换为日期时间"。

现在,我知道时间戳不是日期时间,因此不会在这里使用。据我所知,我看到datetime和Timestamp都有相同的大小 - bytes(8)。我想知道为什么时间戳没有自动转换为日期时间,我在这里错过/误解了什么。请原谅,如果这是一个愚蠢的问题,我对SQL很新。

mysqli_result::fetch_*

表定义

    create table #tempDocumentCategory (documentcategorycodeidno int , documentcategorycode varchar(50), documentcategorycodedescription varchar(200), timestamp datetime,Inactive bit)
    insert #tempDocumentCategory(documentcategorycodeidno  , documentcategorycode , documentcategorycodedescription , timestamp ,Inactive )
    exec sp_getDocumentCategoriesCodesCtrl 1

1 个答案:

答案 0 :(得分:1)

您正在使用数据类型时间戳在[timestamp]列中存储数据。 数据类型时间戳与datetime数据类型没有任何关系。时间戳只是数据库上的自动递增值。因此,错误的决定是将时间戳转换为日期时间。您可以通过以下方式解决问题:

   create table #tempDocumentCategory(
          documentcategorycodeidno int 
         ,documentcategorycode varchar(50)
         ,documentcategorycodedescription varchar(200)
         ,timestamp VARBINARY(8)
         ,Inactive bit
    )

如果需要有日期时间,则需要更改表[tDocumentCategory_Codes],将[timestamp]列类型更改为DATETIME,然后设置默认值(GETDATE())。在这种情况下,您可以在#tempDocumentCategory中使用DATETIME格式并获得所需的结果