当我执行以下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
但这并没有帮助。
答案 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操作消除空值。
哎呀... 道歉。