使用SELECT * INTO时获得非NULL警告

时间:2018-05-16 16:40:28

标签: sql-server nullable suppress-warnings select-into

当我执行以下proc时,我收到此警告:

  

尝试将非NULL-NULL列的值设置为NULL。

USE [DbTwo]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

alter proc [dbo].[TEST_warning_proc]
as 

IF OBJECT_ID('MySchema..vitals', 'U') IS NOT NULL DROP TABLE MySchema..vitals
IF OBJECT_ID('MySchema..order_list', 'U') IS NOT NULL DROP TABLE MySchema..order_list

select * into MySchema..vitals
from DbOne..vitals
where FacilityID in
 (select FacilityID from DbTwo..MySchemaFacilities)

select * into MySchema..order_list
from DbOne..order_list
where FacilityID in
 (select FacilityID from DbTwo..MySchemaFacilities)

由于我正在做SELECT * INTO,这怎么可能呢?难道不能创建一个与原始表完全相同的新表吗?

我尝试过设置:

SET ANSI_WARNINGS OFF

但这并没有帮助。

2 个答案:

答案 0 :(得分:0)

我怀疑你的表没有被删除 - maybe there is a block going on这个帮助函数。您可以在尝试删除select top 1 * from vitals后立即放置sys.objects来验证此理论。使用create table dbo.vitals (c1 int not null) insert into vitals values (1) if exists(SELECT 1 FROM sys.objects WHERE name = N'vitals') begin drop table vitals end select null as c1 into vitals select * from vitals 可以避免这种情况。 使用sys.objects

switchMap

<强> ONLINE DEMO

答案 1 :(得分:0)

我发现了这个问题......

当我&#34;消毒&#34;我的帖子在这里发布,我使用了名字

from DbOne..vitals

from DbOne..order_list

这两个对象实际上是视图而不是。我尝试从视图的定义运行原始的SELECT并得到:

  

通过聚合或其他SET操作消除空值。

哎呀... 道歉。