SQL Server的最大大小.SQL文件或变量?

时间:2013-11-17 08:24:28

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2000

我有一个大约20MB的SQL文件/ SQL字符串。 SQL服务器根本无法接受此文件。用于查询数据或将数据插入SQL服务器的.SQL文件或变量的最大大小是否有限制?

当我说变量时,它意味着通过某种编程语言甚至ETL工具将变量传递给SQL服务器。

9 个答案:

答案 0 :(得分:4)

是的,我之前见过这个。 .sql文件没有大小限制。它更多的是关于在.sql文件中执行什么样的逻辑。如果你有一小部分快速插入到一个小表ex:INSERT INTO myTable(column1)VALUES(1)然后你可以在一个.sql文件中运行数千个这样的文件,而如果你在插入/文件中使用重逻辑删除然后你会遇到这些问题。文件的大小不如文件中的大小重要。

当我们过去遇到这些时,我们从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文件,而不是真正在编辑器中打开它。

基本上,您所要做的就是:

  1. Query菜单中选择SQLCMD Mode
  2. 查找被调用脚本(大型SQL文件)的路径
  3. 打开New Query(或使用现有的)并将该代码写入新行

    :r D:\PathToMyLargeFile\MyLargeFile.sql

  4. 运行该(调用)脚本

  5. 如果您需要在被调用的脚本中使用变量,则必须在调用脚本中声明它。然后你的调用脚本应如下所示:

    :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)

以下是few links2我希望他们可能对你有所帮助

答案 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