用大于 8000 的大小替换所有 varchar 列声明

Posted

技术标签:

【中文标题】用大于 8000 的大小替换所有 varchar 列声明【英文标题】:Replace all varchar column declarations with a size greater than 8000 【发布时间】:2012-10-19 06:34:13 【问题描述】:

我有一个来自 mysql 的 sql 转储文件,用于创建 SQL Server (2005) 表。

我需要将大于 varchar(8000)(sql server 2005 的最大值)的列声明更改为 varchar(max)。

我正在使用 Visual Basic 脚本来解析转储文件并进行这些更改。它只是将整个文件视为一个字符串。如果数字大于8000,我只想更改,但我不知道该怎么做。有没有办法检查声明中的那个数字并改变它?我制作了一个正则表达式来查找声明中的数字。但我不知道怎么说:

对于所有匹配 varchar(int>8000) 的字符串,更改为 varchar(max)。

【问题讨论】:

编写一个正则表达式来提取()之间的所有数字并将其与8000进行比较。如果> 8000,则替换为MAX 【参考方案1】:

正则表达式匹配大于(或等于)8000 的数字:/^([89]\d3|\d5,)$/

其中/ 是正则表达式的分隔符,后跟开始 (^),后跟 ((...|...)) 8 位或 9 位和 3 位以上的数字 ([89]\d3) 或 5 位或以上的数字 (@ 987654326@) 后跟字符串结尾 ($) 和正则表达式分隔符 (/)。

要在您的上下文中使用,应该这样做......

/varchar\(\s*([89]\d3|\d5,)\s*\)/

这已转义大括号 \(...\) 和可选空格 \s* 以及您的关键字 varchar

【讨论】:

试试这个:s.Replace("/varchar\(\s*([89]\d3|\d5,)\s*\)/", "varchar(max)") 但它并没有改变任何东西。 是不是只改变了第一个?也许您需要一个全局标志 - 但我不知道在 vb.net 中添加它的位置。此外,您可能不需要分隔符,因此只需尝试在开头和结尾去掉 /。这些是我在vb.net中不熟悉的正则表达式语言特定的细微差别@

以上是关于用大于 8000 的大小替换所有 varchar 列声明的主要内容,如果未能解决你的问题,请参考以下文章

在 HashByte md5 函数中使用 varchar(8000) 列值

如何用plsql语句把一个表的所有列都转换为字符型

SQL中char nchar varchar nvarchar text ntext的区别

sql替换数据库字段中的字符

sqlserver2008数据库中,我想设置varchar字段的长度为20000,要怎么做

如何用 0 替换 varchar 列中的所有非数字值