我正在执行语句
insert into [dbo].[Table_1]
values ('43546354354', '35435454351', 'vvish', GETDATE(), 'vvish', GETDATE())
总共154,155行。我尝试过,并遇到以下错误。
该脚本超出了Transact-SQL IntelliSense最大脚本大小设置。您可以在“工具/选项”菜单中的“文本编辑器” /“ Transact-SQL / IntelliSense”页面上更改设置。
我还去了Tools => Options => TextEditor => Transact-sql => Intellisense并将“最大脚本大小增加到5MB”。
我尝试将每个50,000行的行移动到不同的脚本,但是移动和执行它花费了很长时间。我还有许多其他大小相同的脚本。任何建议请帮我。
答案 0 :(得分:1)
具有多个连接。期。严重的是,这已经是SQL Server的局限性(一个连接一次只能操作一件事情-MARS很好,但是您仍然只能每行发送和执行一条语句)。
因此,运行一个池行,让X个线程打开一个连接,然后逐行发送线。
另一种方法是拆分文件并并行执行它们-相同的概念,只是每行级别不在一行上。
或者只是变得真实,并使用解析它们的代码并使用SqlGBulkLoad。永远不要这样写语句本身,有很多方法可以更有效地批量加载数据,然后处理sql语句。
答案 1 :(得分:0)
通过将多个元组附加到单个INSERT ... VALUES
语句中,您也许可以提高性能:
insert into [dbo].[Table_1]
values ('43546354354', '35435454351', 'vvish', GETDATE(), 'vvish', GETDATE()),
('43546354355', '35435454352', 'vvisx', GETDATE(), 'vvisx', GETDATE())
但是即使声明较少,您仍然会遇到最大文件大小限制。
答案 2 :(得分:0)
这取决于其他一些因素。 如果表没有触发器,索引等,则可以使用“ sqlcmd”命令进行加载。 只需生成您的脚本并将其放在文件中即可。然后,您可以在Windows NT Shell中运行以下脚本:
sqlcmd -S MyServer -d MyDatabase -E -I -i MyScript.sql
但是,正如TomTom所建议的,有更多漂亮/更快的方法可以直接从文件加载而不是生成脚本。
答案 3 :(得分:0)
您可以构建存储过程来处理插入,并让该存储过程将用户定义的表类型作为参数,这将允许您将数据作为表传递给该存储过程,并且该存储过程可以运行只要需要。我做出一个危险的假设,即您要从某种文件中获取数据并开发这些sql命令,因此我建议将C#与dapper一起使用,以将create传递并将datatable传递给存储过程。
答案 4 :(得分:0)
您列出的错误与IntelliSense有关,与您的查询无关。
IntelliSense说,“嘿,这东西很大。我什至不去尝试。”
我怀疑您使用Redgate或类似工具来生成更新脚本,发现它太大,然后将其分解成碎片。
您需要做的是确保您拥有
使用[YourDataBaseName] 开始
位于每个查询的顶部。
然后在执行时,应将结果列出。
如果这回答了您的问题,请投票。经过几年的Stack Overflow依赖,我终于有了足够的街头信誉来发布答案!