当我执行这个时:
DROP TABLE IF EXISTS #QueryHashes;
CREATE TABLE #QueryHashes (query_hash BINARY(8) NOT NULL PRIMARY KEY);
PRINT CAST(0x0169857CCD5BBBE4E AS BINARY(8)); -- just testing that the value is a legitimate BINARY(8)
/* Insert your query_hash values inside the outer parenthesis below,
each wrapped in parenthesis, comma-separated (for example, "(0x89E35F2D4C638298), (0x89E35F2D4C638298)")
*/
INSERT INTO #QueryHashes (query_hash)
VALUES (0x0169857CCD5BBBE4E);
PRINT CAST(0x0169857CCD5BBBE4E AS BINARY(8)); -- just testing that the value is a legitimate BINARY(8)
我收到此错误:
0x00169857CCD5BBBE 消息 2628,级别 16,状态 1,第 9 行 字符串或二进制数据将在表“tempdb.dbo.#QueryHashes_________________________________________________________________________________________________________000000000D06”列“query_hash”中被截断。截断值:''。该语句已终止。0x00169857CCD5BBBE
请注意,错误消息中的值似乎是一个空字符串。
显然,插入物失效了,而铸件却可以工作。谁能帮助我理解插入或表定义有什么问题?即使我删除“NOT NULL PRIMARY KEY”,我仍然收到相同的错误。
(最终的目的是向表中插入一些值,并将其连接到一个大查询中。)
正如 @mustaccio 指出的,这是因为你的值是 9 个字节长。如果该值太长,CAST 会为您截断该值。见下文 -
在控制台中产生这个 -