插入多个基于彼此的值的记录

时间:2014-01-16 17:05:44

标签: c# sql-server tsql

抱歉标题不好,我还没想出更好的标题。

我目前正在优化一种基本上可以进行数千次选择和插入的工具。

假设以下关系

class A
{
    public long ID; // This is an automatic key by the sqlserver
    ...Some other values
}

class B
{ 
    public long RefID // Reference to A.ID;
    ... some other values...
}

class C
{ 
    public long RefID // Reference to A.ID;
    ... some other values
}

目前正在发生的是获取ObjectA的SELECT, 如果它不存在,请创建一个新的。 Query返回ID(OUTPUT INSERTED.ID)

然后选择(如果不存在则插入)对象B和C.

有没有办法将其压缩为单个SQL语句?

我在自动生成对象A的部分挣扎。

所以它必须做这样的事情:

IF NOT EXISTS(SELECT * FROM TableA WHERE someConditions)
    INSERT... and get the ID
ELSE
    REMEMBER THE ID?

IF NOT EXISTS(SELECT * FROM TableB WERE RefID = ourRememberedID)
    INSERT...

IF NOT EXISTS(SELECT * FROM TableC WERE RefID = ourRememberedID)
    INSERT...

请注意,不能使用存储过程。

1 个答案:

答案 0 :(得分:0)

一点帮助 您可以在一个声明中发出这三个 使用DataReader NextResult

select ID from FROM TableA WHERE someConditions
select count(*) from TableB where refID = (select ID from FROM TableA WHERE someConditions)
select count(*) from TableC where refID = (select ID from FROM TableA WHERE someConditions) 

但是即便如此,你还是冒了一个风险,TableB或TableC在你到达之前有一个插入

如果我无法使用存储过程,我想我会使用TVP将数据加载到#temp中 我认为你可以在交易中制作4个陈述