我正在使用创建的批量插入包将Excel中的批量数据插入SQL。在顺序插入数据时,我错过了必须插入的文件,因此我在中间停了包。 但是,该软件包已经添加了2500行,我使用“从coulmn_name中删除top(2500)”删除了这些行,然后继续插入数据。 现在,我担心是否实际上删除了最后添加的记录或一些随机数据。 谁能帮助我理解这一点?
答案 0 :(得分:1)
您将需要其他方式来标识要删除的行,例如具有BatchID或其他名称。人们通常为此使用登台表,以免大批量操作不会干扰正常使用,而且当事情往南走时,您可以截断并重新开始。
要表明TOP不在乎“最后一个”:
CREATE TABLE #foo(id int IDENTITY(1,1) PRIMARY KEY, name sysname);
INSERT #foo(name) VALUES('Bob');
INSERT #foo(name) VALUES('Frank');
INSERT #foo(name) VALUES('Aaron');
INSERT #foo(name) VALUES('William');
INSERT #foo(name) VALUES('Mary');
DELETE TOP (2) FROM #foo;
SELECT * FROM #foo;
DROP TABLE #foo;
结果:
id name
-- -------
3 Aaron
4 William
5 Mary
该操作删除了插入的 first 前两个(并且恰好被顺序分配了整数值)。现在尝试这个:
CREATE TABLE #foo(id int PRIMARY KEY, name sysname);
INSERT #foo(id,name) VALUES(3,'Bob');
INSERT #foo(id,name) VALUES(12,'Frank');
INSERT #foo(id,name) VALUES(84,'Aaron');
INSERT #foo(id,name) VALUES(16,'William');
INSERT #foo(id,name) VALUES(7,'Mary');
DELETE TOP (2) FROM #foo;
SELECT * FROM #foo;
DROP TABLE #foo;
结果:
id name
-- -------
12 Frank
16 William
84 Aaron
删除了不同的行。现在将CREATE
更改为:
CREATE TABLE #foo(id int, name sysname UNIQUE);
相同的插入+删除产量:
id name
-- -------
84 Aaron
16 William
7 Mary
未订购表。不带ORDER BY的TOP(实际上,任何不带ORDER BY的查询)都应该被认为是任意的(也许甚至认为它是随机的也是有帮助的)。
答案 1 :(得分:0)
您已删除随机数据,因为行按读取顺序返回。例如,如果您运行相同的“ select top 5”语句5-10次,则不能保证在那里会得到相同的数据集,因为某些页面或字符串可能会被阻止。