Chr*_*ord 5 t-sql sql-server sql-server-2014
我在使用 SQL Server 2014 的功能时在客户端数据库上遇到了一个奇怪的问题。ISNULL()在线搜索使我发现其他人在使用时遇到了相同的错误INSERT。运行简单的时出现以下错误SELECT:
Msg 681, Level 16, State 3, Line 1
Attempting to set a non-NULL-able column's value to NULL.
Run Code Online (Sandbox Code Playgroud)
以下查询会产生该错误:
SELECT
ISNULL( [t2].[date_update], GETDATE() )
FROM
[dbo].[t1]
INNER JOIN
[dbo].[t2] ON [t1].[a] = [t2].[id];
Run Code Online (Sandbox Code Playgroud)
我已经精简了表格以简化说明,但受影响的列定义如下:
CREATE TABLE [dbo].[t1] (
[id] INT NOT NULL PRIMARY KEY,
[a] NVARCHAR(100) NOT NULL
);
CREATE TABLE [dbo].[t2] (
[id] BIGINT NOT NULL PRIMARY KEY,
[date_update] DATETIME NULL
);
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助或见解!
编辑:
在故障排除中,我能够使用以下内容在客户端系统上重现相同的错误消息INSERT:
CREATE TABLE #t2 ([id] BIGINT NOT NULL PRIMARY KEY NONCLUSTERED, [date_update] DATETIME NULL);
INSERT INTO #t2 ([id], [date_update)
SELECT [id], [date_update]
FROM [dbo].[t2];
Run Code Online (Sandbox Code Playgroud)
编辑2:
更多的故障排除表明正在SELECT使用的索引有问题。当尝试重建索引时,我得到同样的错误!
Rebuild failed for Index xxx
Attempting to set a non-NULL-able column's value to NULL.
Run Code Online (Sandbox Code Playgroud)
由于包含 NOT NULL 列定义的表中存在完全 NULL 行,因此显示错误消息。
在这种情况下,损坏的原因未知,但可以解释该错误:查询SELECT正在创建哈希表以促进连接,它试图将 NULL 插入主键列。
可以通过创建一个具有相同定义但所有列都NULL可用的表来测试这一点,从损坏的表中插入该表,然后NULL在假定的NOT NULL列中查询 s。
| 归档时间: |
|
| 查看次数: |
9296 次 |
| 最近记录: |