我有超过一百万个号码的列表。我需要将数字放在一个表中按数字排序,另一个按原样,引用已排序数字的ID,表格结构如下:
sortedNumbers
Id | SortedNumber
1 01356
2 45789
编号
Id | Number | SortedNumberId
1 35601 1
2 94578 2
3 97548 2
目前,我首先填充已排序的数字表,然后填写标准数字表,并执行select语句以获取已排序的数字Id。所有这些select语句都让它变慢了,有没有办法在一个语句中完成所有操作,从不使用select语句来获取已排序数字的Id?
循环的每次迭代的当前查询,sortedNumber是通过对代码
中的数字进行排序来生成的循环1
query = "INSERT into SortedNumbers VALUES (" + SortedNumber + ")";
循环2
query = "SELECT Id FROM SortedNumbers WHERE SortedNumber = " + sortedNumber;
query = "INSERT into Numbers VALUES (" + Number + ", " + SortedId + ")";
答案 0 :(得分:1)
首先,您不要将已排序的数字放入数据库中。您将数字放入表中,然后按照您想要的任何排序条件查询表排序。
SELECT number from table ORDER BY number
但我希望我已经错过了你要做的任何事情。你能发一些例子吗?
答案 1 :(得分:1)
您可以将两个插入包装到Transaction
中,并通过调用SCOPE_IDENTITY()
从sortedNumbers表中获取ID值。这假设sortedNumbers表中的ID列是Identity列:
BEGIN TRANSACTION
INSERT sortedNumbers (SortedNumber) VALUES (sortednumbervalue)
INSERT Numbers (Number, SortedNumberId) VALUES (numbervalue, SCOPE_IDENTITY())
COMMIT