2014-10-29 17 views
0

我试图插入表中值不存在的位置。SQL Server插入到不存在的位置

这是我的时刻:

insert into UToolDb.dbo.MQ_MESSAGES_NEW (ENVId, QueueName, CorrelationId, MessageId, MessageContent) 
    select 
     E.ENVId, 
     'RO00.GAT1.STUB_OPVANG_1.AI', 
     '323031333130303431313533343933383438363739353032', 
     'C3E2D840E2D8F1F24040404040404040CC0F7930FE822942', 
     'TEST Content' 
    from 
     UToolDb.dbo.ENVIRONMENTS E 
    where 
     E.EnvironmentName = 'KETEN1' 
     and not exists (select 
         EE.ENVId, 
         'RO00.GAT1.STUB_OPVANG_1.AI', 
         '323031333130303431313533343933383438363739353032', 
         'C3E2D840E2D8F1F24040404040404040CC0F7930FE822942', 
         'TEST Content' 
         from 
         UToolDb.dbo.ENVIRONMENTS EE 
         where 
         EE.EnvironmentName = 'KETEN1'  
         and EE.EnvironmentName = E.EnvironmentName) 

出于某种原因,它不插入:插入

(0 row(s) affected). 

值在表中不存在。

我在做什么错?

+0

为什么EE.Environmentname的双重检查? – Pleun 2014-10-29 18:46:28

+2

要排除故障,请自行运行子查询以查看是否有任何结果。与你的问题无关,当运行存在/不存在查询时,你不需要太多的select子句。所有你需要的是不存在的(select 1 from etc) – 2014-10-29 18:47:17

回答

2

如果在同一个表中不存在同一行,您将从ENVIRONMENTS获得一行并再次检查。

可能是你想,如果行MQ_MESSAGES_NEW而不是ENVIRONMENTS

0

已经存在找到了解决办法:

insert into UToolDb.dbo.MQ_MESSAGES_NEW (
    ENVId, 
    QueueName, 
    CorrelationId, 
    MessageId, 
    MessageContent 
) 
select 
    E.ENVId, 
    ?, 
    ?, 
    ?, 
    ? 
from UToolDb.dbo.ENVIRONMENTS E 
where E.EnvironmentName = 'KETEN1' 
and not exists(
    select 
     E.ENVId, 
     M.* 
    from UToolDb.dbo.ENVIRONMENTS E 
    left join UToolDb.dbo.MQ_MESSAGES_NEW M 
    on E.ENVId = M.ENVId 
    where E.EnvironmentName = 'KETEN1' 
    and QueueName = ? 
    and CorrelationId = ? 
    and MessageId = ? 
    and MessageContent = ? 
) 
+0

我现在唯一的问题是将变量从我预先准备的语句传递给'?'在查询的第二部分。有人知道吗? – 2014-10-30 08:09:31