我目前正在编写一个脚本,智能地将数据库剥离成一系列带有种子标识列的有序INSERT语句,这些列允许我将记录放入新数据库而不会破坏任何键或关系。
我正在使用PRINT函数将完成的insert语句写入消息窗口并保存以查询文件。但是,似乎消息窗口有最大字符限制,有没有办法改变它?
这是一个拥有120k用户的数据库,我最终会得到数十万个插入语句,因此文件会非常大。
答案 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
几个月前我不得不做类似的事情。我写了一个c#应用程序来为我编写sql。消息字符串最多可达8,000 字符长,如果它是非Unicode 字符串,如果长度为4,000个字符 它是一个Unicode字符串。更长的字符串 被截断。 varchar(max)和 nvarchar(max)数据类型被截断 到不大于的数据类型 varchar(8000)和nvarchar(4000)。
此致
答案 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))