0

我正在努力寻找一种方法来将我需要的一切都放入一个 SQL 语句中进行优化,我将 SQL Server 与 Visual Studio 一起使用。

我有两张桌子

number
ID | number | sorted_id
0    1423     0
1    1324     0
3    8293     1

sorted_number
ID | sorted_number
0    1234
1    2389

循环遍历一个数组,我会将数字重新组织成顺序,使 4812 变为 1248。然后我想将 int 数字放入 number 表,将 int sorted_number 放入 sorted_number 表,然后从 sorted_number 表中获取 ID 并将其放入到正确位置的数字表中。做这一切而不会得到任何重复的值。

我目前从表中选择以查看每次迭代中是否已经存在该值的方法对性能来说确实很糟糕。

有任何想法吗?

编辑:

在@acfrancis 响应之后,这是我试图形成的代码:

insert_data = db.Query("insert into sorted_number (sorted_number) values (@sorted_number)" +
                       "declare @myid int" +
                       "set @myid = scope_identity()" +
                       "insert into number (number, sorted_id) values (@number, @myid)", sorted_number , number);

当我到达声明的声明部分时,我收到一个错误。

4

1 回答 1

0

你的方法没问题,但你应该先插入sorted_number以避免更新到number. 如果性能不好,您可以将索引添加到sorted_number.sorted_number. 或者,在 TSQL 的单个块内完成所有操作(例如,存储过程),以便您可以使用它scope_identity()来检索sorted_number.ID刚刚插入的行。这将避免额外的选择。

方法一

insert sorted_number (sorted_number) values (1248)
declare @myid int
select @myid = id from sorted_number where sorted_number = 1248
insert number (number, sorted_id) values (4812, @myid)

方法二

insert sorted_number (sorted_number) values (1248)
declare @myid int
set @myid = scope_identity()
insert number (number, sorted_id) values (4812, @myid)

测试脚本

create table number (ID int identity(1,1) primary key, number int, sorted_id int)
create table sorted_number (ID int identity(1,1) primary key, sorted_number int)
alter table number add constraint fknumber_sortednumber foreign key (sorted_id) references sorted_number(ID)

insert sorted_number (sorted_number) values (1248)
declare @myid int
select @myid = id from sorted_number where sorted_number = 1248
insert number (number, sorted_id) values (4812, @myid)

select * from number
select * from sorted_number

insert sorted_number (sorted_number) values (1248)
--declare @myid int
set @myid = scope_identity()
insert number (number, sorted_id) values (4812, @myid)

select * from number
select * from sorted_number
于 2013-10-23T14:21:50.507 回答