Sql server 使用Powerbuilder将数据从数据窗口/数据存储复制到SQL Server表的最快方法是什么
我们有一个数据存储(powerbuilderdatawindow的孪生姐妹),它包含超过40000行,插入Microsoft SQL Server表需要超过30分钟 目前,我正在使用一个脚本生成器为每一行生成sql表定义和insert命令。最后,将完整脚本发送到sql server以执行 我已经发现脚本生成过程消耗了整个任务的97%以上 您能帮我找到一种更有效的方法将客户端数据复制到sql server表中吗 Edit1(在NoazDad的评论之后): 在回答之前,请记住:Sql server 使用Powerbuilder将数据从数据窗口/数据存储复制到SQL Server表的最快方法是什么,sql-server,powerbuilder,datastore,datawindow,Sql Server,Powerbuilder,Datastore,Datawindow,我们有一个数据存储(powerbuilderdatawindow的孪生姐妹),它包含超过40000行,插入Microsoft SQL Server表需要超过30分钟 目前,我正在使用一个脚本生成器为每一行生成sql表定义和insert命令。最后,将完整脚本发送到sql server以执行 我已经发现脚本生成过程消耗了整个任务的97%以上 您能帮我找到一种更有效的方法将客户端数据复制到sql server表中吗 Edit1(在NoazDad的评论之后): 在回答之前,请记住: Tabel结构是动
- Tabel结构是动态的李>
- 我试图避免使用datastore.Update()方法李>
如果这是不可能的,并且必须使用嵌入式SQL,那么至少每1000行左右执行一次提交。否则,SQLServer将针对表建立撤消日志,以防出现问题,必须回滚这些日志 按照我的理解,您是说在用户按下“GO”并启动脚本之前,插入数据的表甚至不存在于模式中?然后创建创建表的嵌入式SQL语句,并在循环中逐个插入行 那是。。。好吧,我只是说我不会这样做 您是否不知道该模式在将来会是什么样子?如果这样做,则针对该表绘制数据存储,并使用ds_1.Update()生成INSERT语句。使用数据窗口了解它的用途
如果这是不可能的,并且必须使用嵌入式SQL,那么至少每1000行左右执行一次提交。否则,SQLServer将针对表建立撤消日志,以防出现问题,必须回滚这些日志 不确定它是否会更快,但您可以将数据存储中的数据保存在以制表符分隔的文件中,然后通过Sql执行大容量插入。差不多 散装 插入CSVTest 从'c:\csvtest.txt' 具有 ( 字段终止符='\t', 行终止符='\n' ) 去
您可以尝试通过ds.object.datawindow.data语法将数据存储内容保存到字符串变量中,然后将其保存到文件中,然后执行SQL。不确定这是否会更快,但您可以将数据存储中的数据保存到以制表符分隔的文件中,然后通过SQL执行大容量插入。差不多 散装 插入CSVTest 从'c:\csvtest.txt' 具有 ( 字段终止符='\t', 行终止符='\n' ) 去 您可以尝试通过ds.object.datawindow.data语法将数据存储内容保存到字符串变量中,然后将其保存到文件中,然后执行SQL。其他想法
- 在更新表时禁用更新表上的触发器(如果可能)
- 使用PB管道对象,它有提交设置-可能更快,但不会太多
- 好主意。在服务器端执行一些操作。我将尝试为40K insert创建SQL语句,并调用一个存储过程来发送所有40K insert/update语句,让该存储过程处理插入/更新
- 创建一个包含几列(其中一列是长文本)的虚拟表,使用上一个想法中提到的SQL语句块对其进行更新,并使用一个进程来分隔和执行SQL语句
- 上述的一些变体,但使用马特提到的批量插入。批量插入是插入多行的最快方法
- 也许可以尝试使用自动提交功能,以便只在最后提交,或者按照某人已经提到的每10k行提交一次
- PB在事务对象(连接)中有一个异步选项,也许您可以让更新在后台进行,让用户继续。这不适用于所有数据库,在您的情况下也可能不起作用。我使用异步选项运气不太好
Update TABLE set (col1, col2) values ('a', 'b')|Update TABLE set (col1, col2) values ('a', 'b')|Update TABLE set (col1, col2) values ('a', 'b')
在程序上:
解析sql语句并运行它们。简单明了。其他想法
- 在更新表时禁用更新表上的触发器(如果可能)
- 使用PB管道对象,它有提交设置-可能更快,但不会太多
- 好主意。在服务器端执行一些操作。我将尝试为40K insert创建SQL语句,并调用一个存储过程来发送所有40K insert/update语句,让该存储过程处理插入/更新
- 创建一个包含几列的虚拟表,o