SQL Server中的“无效”类型是什么?

时间:2019-09-06 14:12:51

标签: sql-server tsql

我制作了一个SELECT INTO表,然后使用该表,在我看来这是一种无效数据。该列只有空值,但在弹出窗口中该列不为空。

enter image description here

SQL Server中的void列类型是什么意思?因为我从未见过。

SELECT INTO语句:

SELECT DISTINCT 
    Item,
    NULL AS ItemDescription,
    NULL AS Marca,
    NULL AS Categoria,
    NULL AS SubCategoria
INTO 
    setup.MaestroProductos
FROM
    temp.datos
WHERE
    Item NOT IN ('servicio', 'flete') 
    AND Categoria NOT IN ('servicios', 'activos', 'activo fijo')
ORDER BY
    Item

1 个答案:

答案 0 :(得分:2)

好像您在表中插入了文字NULL

如果将下面的SQL放入SSMS,您会注意到NullColumn被intellisense定义为“ void”列(有趣的是还被定义为“ not null”):

USE Sandbox;
GO
SELECT NULL AS NullColumn,
       1 AS IntColumn
INTO MyTable;
GO

SELECT NullColumn,
       IntColumn
FROM dbo.MyTable;
GO
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'MyTable';

GO

DROP TABLE dbo.MyTable;

enter image description here

这是因为在同一会话中,SSMS无法派生文字NULL的数据类型(甚至是Nullability);但是创建的列最终将成为可为空的int

如果您运行SQL直到并包含INTO语句,然后创建一个新连接并检查数据类型(在刷新intellisense之后),那么您会注意到它显示为可为空的{{1} }:

enter image description here

要回应OP的评论“因为在设计器中,我将列定义为整数类型,而在图像的弹出窗口中将其定义为void类型。” 我无法复制此行为。如果不定义数据类型,则只能这样做。如果OP确实是 定义类型,那么我们需要他们的脚本来复制问题。

enter image description here