用大于 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) 列值
SQL中char nchar varchar nvarchar text ntext的区别