我有一个大约20MB的SQL文件/ SQL字符串。 SQL服务器根本无法接受此文件。用于查询数据或将数据插入SQL服务器的.SQL文件或变量的最大大小是否有限制?
当我说变量时,它意味着通过某种编程语言甚至ETL工具将变量传递给SQL服务器。
答案 0 :(得分:4)
当我们过去遇到这些时,我们从SQLCMD运行了.sql文件。很容易做到。您还可以在C#或vb中创建流读取器以读取.sql文件并构建要执行的查询。
SQLCMD: SQLCMD -S [Servername] -E -i [SQL Script]
那是否足够清楚?如果你发布了一个你想要做的例子,那么我可以为你编写一些示例代码。
当我第一次遇到这个问题时,我发现的唯一解决方案是将.sql文件拆分成较小的文件。这对我们的解决方案不起作用,但SQLCMD确实如此。我们后来实现了一个实用程序,它读取这些大文件并使用一些快速的c#编程和一个streamreader来执行它们。
答案 1 :(得分:4)
您可以使用SQLCMD,但我只是使用该命令行工具遇到了2GB的文件大小限制。即使我在每次发言后都有一个GO,这也就是这样。一旦超过2GB边界,我会收到不正确的语法错误。
经过一番搜索,我找到了这个链接: https://connect.microsoft.com/SQLServer/feedback/details/272757/sqlcmd-exe-should-not-have-a-limit-to-the-size-of-file-it-will-process
上面的链接页面表示忽略2GB之后的每个字符。这可以解释我的语法错误。
答案 2 :(得分:2)
SQL文件的大小应受PC /工作站上可用内存的限制。但是,如果您不想使用osql和/或第三方工具,那么在SSMS中就有了解决方案。它被称为 SQLCMD模式,它使您能够通过引用它来运行SQL文件,而不是真正在编辑器中打开它。
基本上,您所要做的就是:
Query
菜单中选择SQLCMD Mode
打开New Query
(或使用现有的)并将该代码写入新行
:r D:\PathToMyLargeFile\MyLargeFile.sql
运行该(调用)脚本
如果您需要在被调用的脚本中使用变量,则必须在调用脚本中声明它。然后你的调用脚本应如下所示:
:setvar myVariable "My variable content"
:r D:\PathToMyLargeFile\MyLargeFile.sql
假设您的被调用脚本将该变量用于应插入行的内容。那么看起来应该是这样......
INSERT INTO MyTable (MyColumn)
SELECT '$(myVariable)'
答案 3 :(得分:1)
Pranav在参考Maximum Capacity Specifications for SQL Server文章时走在正确的轨道上;但是,执行查询的适用限制是:
包含SQL语句的字符串长度(批量大小) 1 65,536 * 网络包大小
1 网络数据包大小是表格数据流(TDS)的大小 用于在应用程序和关系之间进行通信的数据包 数据库引擎。默认数据包大小为4 KB,由 网络数据包大小配置选项。
此外,我发现在SQL Server Management Studio中执行大量SQL语句时出现问题。 (有关相关问题,请参阅SQL Server does not finish execution of a large batch of SQL statements。)尝试将SET NOCOUNT ON
添加到SQL中以防止发送不必要的数据。此外,在执行大量INSERT语句时,请尝试使用GO
批处理分隔符将它们分批。
答案 4 :(得分:1)
我认为您的担忧来自于尝试在SSMS中打开文件。在SSMS中,打开一个20mb的文件可能会有问题 - 与尝试在记事本或大多数文本编辑器中打开相同的文件没什么不同。
对于记录 - 对于其他海报 - 我认为问题与SQL列,表,对象或数据库大小完全无关!这只是使用IDE的一个问题。
如果要导入的文件是纯数据,请使用NO sql命令尝试批量导入。
如果文件是SQL命令,那么您将需要一个可以处理大文件的编辑器,例如Vedit。 http://www.vedit.com/它将无法执行sql。您必须使用如上所述的sqlcmd从命令行执行此操作。
答案 5 :(得分:0)
答案 6 :(得分:0)
我通过MSDN上的这篇文章指出了“ Maximum Capacity Specifications for SQL Server ”,通过这个,我找到了:
对于 Sql Server 2012,2008 R2,2005 :
最大文件大小(数据): 16 TB
每个varchar(max),varbinary(max),xml,text或image列的最大字节数: 2 ^ 31-1 字节(~2048 GB)
有关SQL Server最大容量规范的更多详细信息,请参阅:
对于SQL Server 2012: http://msdn.microsoft.com/en-us/library/ms143432(v=sql.110).aspx
对于SQL Server 2008 R2: http://msdn.microsoft.com/en-us/library/ms143432(v=sql.105).aspx
对于SQL Server 2005: http://msdn.microsoft.com/en-us/library/ms143432(v=sql.90).aspx
对于Sql server 2000,我不确定,因为MSDN似乎已经删除了相关文档。
答案 7 :(得分:0)
从您的问题中不清楚SQL文件包含什么。我建议的解决方案仅适用于您引用的SQL文件只有insert语句。
将大量数据插入SQL Server的最快方法是使用批量复制功能(BCP BCP Utility)
如果您有SQL Server管理工作室,那么您还应该在C:\ Program Files(x86)\ Microsoft SQL Server \ 90 \ Tools \ Binn(或等效的)中查看bcp utlity。
如果要使用BCP实用程序,则需要创建包含数据的文件,这可以用逗号分隔。请参阅bcp文档,了解文件的外观。
答案 8 :(得分:0)
对于SQL Server的最大容量规范,您可以在此处签到。 http://msdn.microsoft.com/en-us/library/ms143432(v=sql.120).aspx
如果你问“用于查询数据或将数据插入SQL服务器的.SQL文件或变量的最大大小是否有限制?”我会说是的,每个变量都有一个限制。如果你想要大尺寸的上传文件,我建议你将你的文件转换为varbinary,或者你可以增加你的sistem web中的最大上传大小。 这里我举一些例子http://msdn.microsoft.com/en-us/library/aa479405.aspx