我们团队中有人在几年前写过以下问题
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
答案 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格式并获得所需的结果