在SQL 2005中增加消息大小

时间:2010-07-13 18:05:41

标签: sql-server sql-server-2005 tsql printing

我目前正在编写一个脚本,智能地将数据库剥离成一系列带有种子标识列的有序INSERT语句,这些列允许我将记录放入新数据库而不会破坏任何键或关系。

我正在使用PRINT函数将完成的insert语句写入消息窗口并保存以查询文件。但是,似乎消息窗口有最大字符限制,有没有办法改变它?

这是一个拥有120k用户的数据库,我最终会得到数十万个插入语句,因此文件会非常大。

4 个答案:

答案 0 :(得分:1)

我想我们在某些时候都遇到过这个问题,我会告诉你我是如何解决这个问题的。我想输出的每条消息都被插入到一个单独的表上的TEXT列中(实际上我的情况下是一个单独的数据库)。在那里,您可以将其导出到文本等。

答案 1 :(得分:1)

为什么不使用:

bcp Utility 要么 How to: Run the SQL Server Import and Export Wizard

使用每行的插入来填充大型数据库会非常慢。

编辑基于OP的评论

您可以使用包含实际INSERT语句的单个varchar(max)列创建登台表。而不是打印INSERT,将其插入临时表。然后,您可以使用BCP将INSERT从登台表导出到文件,然后只运行该文件(现在已经完成INSERT)。

答案 2 :(得分:1)

不幸的是没有,
来自http://msdn.microsoft.com/en-us/library/ms176047.aspx

  

消息字符串最多可达8,000   字符长,如果它是非Unicode   字符串,如果长度为4,000个字符   它是一个Unicode字符串。更长的字符串   被截断。 varchar(max)和   nvarchar(max)数据类型被截断   到不大于的数据类型   varchar(8000)和nvarchar(4000)。

几个月前我不得不做类似的事情。我写了一个c#应用程序来为我编写sql。

此致

答案 3 :(得分:0)

我认为可以通过将其打印成块来完成

下面的代码为名为NVARCHAR

@query变量执行此操作
PRINT SUBSTRING(@query, 1, 4000)
PRINT SUBSTRING(@query, 4001,8000)
PRINT SUBSTRING(@query, 8001, 12000)
PRINT SUBSTRING(@query, 12001, LEN(@query))