Sql server ';将表达式转换为int';将BIGINT插入BIGINT列时

Sql server ';将表达式转换为int';将BIGINT插入BIGINT列时,sql-server,integer,bigint,Sql Server,Integer,Bigint,我试图在BIGINT列中插入一个BIGINT值,尽管我认为它应该可以工作。但它给出了以下错误: Msg 8115,16级,状态2,第3行算术溢出错误将表达式转换为数据类型int 表的创建脚本: CREATE TABLE Bod ( Voorwerp BIGINT NOT NULL, Bodbedrag DECIMAL(8, 2) NOT NULL, Gebrui

我试图在
BIGINT
列中插入一个
BIGINT
值,尽管我认为它应该可以工作。但它给出了以下错误:

Msg 8115,16级,状态2,第3行算术溢出错误将表达式转换为数据类型int

表的创建脚本:

CREATE TABLE Bod
(
    Voorwerp                BIGINT                  NOT NULL,
    Bodbedrag               DECIMAL(8, 2)           NOT NULL,
    Gebruiker               VARCHAR(50)             NOT NULL,
    BodDag                  DATE                    NOT NULL,
    BodTijdstip             TIME                    NOT NULL
    CONSTRAINT pk_bod PRIMARY KEY(Voorwerp, Bodbedrag)  
);
以及
INSERT
语句:

INSERT INTO Bod 
VALUES (110753735651, 14.90, '01relax', GETDATE(), CURRENT_TIMESTAMP)


编辑:天哪,我是笨蛋,是时候了。我完全错过了。它现在可以用了,很抱歉浪费您的时间。

它确实可以用——我已经试过了。确保在
INSERT
中明确指定列名,而不是依赖于您认为的列顺序,并验证表上没有写得不好的触发器。无需重新编写。那张桌子上可能有扳机吗?另外,如果你想记录一个特定的时间点,包括它发生的那天,最好将其存储为一个
datetime2
列,而不是单独的列。你是在SSMS中执行Insert语句还是通过自定义应用程序执行Insert语句?除了@Damien指出的:
GETDATE()
CURRENT\u TIMESTAMP
返回相同的结果,即精度有限的
DATETIME
。混合使用它们是没有意义的(并且没有只返回时间的函数)。除非您必须与ANSI兼容,否则我建议避免使用
CURRENT\u TIMESTAMP
,因为
GETDATE()
清楚地表明它是一个函数
SYSDATETIME()
对于
TIME
/
DATETIME2
(如果不需要更高的精度,请确保显式指定它,例如
[DATE]TIME(0)
)。@JeroenMostert我再次尝试了它,显式地说明了列名,但它不起作用,说明了相同的错误。据我所知,它没有任何触发器。(我点击了SSMS中的“触发器”文件夹)