【发布时间】:2014-05-13 18:34:15
【问题描述】:
我有一种情况,我必须在我们的 ERP 表中插入/更新大量信息。我首先要检查表,看信息是否存在,如果不存在,则插入,如果存在,则更新。
我有下面的示例代码。
IF NOT EXISTS(SELECT * FROM EXT00101 WHERE PT_Window_ID='ITEM_SHIP_MAINT' and PT_UD_Key='18 RND PA' and PT_UD_Number=5)
BEGIN
INSERT INTO EXT00101 VALUES('ITEM_SHIP_MAINT', '18 RND PA', 5, '70')
End
IF EXISTS(SELECT * FROM EXT00101 WHERE PT_Window_ID='ITEM_SHIP_MAINT' and PT_UD_Key='18 RND PA' and PT_UD_Number=5)
BEGIN
UPDATE EXT00101
SET STRGA255='70'
WHERE PT_Window_ID='ITEM_SHIP_MAINT' and PT_UD_Key='18 RND PA' and PT_UD_Number=5;
END
我对一个包含 23,000 多行的 excel 文件使用了邮件合并。这导致我的 SQL 语句超过 260,000 行。必须有更有效的方法来完成。
如果没有,我将不得不大大分解这段代码。
微软 SQL Server 2005
【问题讨论】:
-
您不能只将电子表格导入临时表(使用 SSIS 之类的东西)然后从那里插入数据吗?这比逐行执行要高效得多。
-
我的意思是作为帖子中的一个想法。我很可能会在我们的工作临时数据库中创建一个临时表并从那里开始。在过去的几个月里,我也刚刚开始接触 SQL。如果 UPSERT 是一个有效的声明,我可以研究它,看看它是否确实是我正在寻找的。span>
-
我现在意识到,我上面的陈述反映了我现在耳朵后面有多湿。先生,这可能对我有用!
-
如果您可以升级到 sql 2008,您可以使用合并命令,使此类操作更简单、更快。除此之外,是的,临时表是要走的路。
-
Gary,一旦 ERP 升级获得批准,我们将进行升级,但不幸的是,我们等不及了。临时表,这与普通表不同吗?还是因为我用了之后,还是要删掉才叫staging?
标签: sql sql-server excel sql-server-2005 erp