VarChar 到 NVarChar 导致截断错误

Nei*_*ght 0 sql-server sql-server-2008-r2 truncate

我正在从一个临时表中导入一些数据,该表有一列定义为VARCHAR(150). 目标表列定义为NVARCHAR(200). 我正在使用一个INSERT INTO语句,但是当我运行 SQL 语句注释掉此列时,查询运行正确。当我取消注释这一行时,我得到:

Msg 8152, Level 16, State 4, Line 26

字符串或二进制数据将被截断。

该语句已终止。

关于为什么会发生这种情况的任何想法?

INSERT INTO table (col1, col2)
SELECT column1
      ,column2
  FROM tmpTable
Run Code Online (Sandbox Code Playgroud)

col1被定义为NVARCHAR(200)并且col2DateTimecolumn1被定义为VARCHAR(150)并且column2DateTime

当我注释掉column1并且col1导入语句运行正常时。

gbn*_*gbn 5

那么这不会发生,除非

  1. 触发器在目标表上触发,错误发生在那里
  2. INSERT 做了一些处理,添加了足够的数据以使其太宽

另外,请问这是怎么回事?除非有一些处理,否则这不会失败。

INSERT INTO table (col1, col2)
SELECT LEFT(column1, 200)
      ,column2
  FROM tmpTable
Run Code Online (Sandbox Code Playgroud)