【问题标题】:Replace all varchar column declarations with a size greater than 8000用大于 8000 的大小替换所有 varchar 列声明
【发布时间】: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

标签: mysql sql-server regex vb.net parsing


【解决方案1】:

正则表达式匹配大于(或等于)8000 的数字:/^([89]\d{3}|\d{5,})$/

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

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

/varchar\(\s*([89]\d{3}|\d{5,})\s*\)/

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

【讨论】:

  • 试试这个:s.Replace("/varchar\(\s*([89]\d{3}|\d{5,})\s*\)/", "varchar(max)") 但它并没有改变任何东西。
  • 是不是只改变了第一个?也许您需要一个全局标志 - 但我不知道在 vb.net 中添加它的位置。此外,您可能不需要分隔符,因此只需尝试在开头和结尾去掉 /。这些是我在vb.net中不熟悉的正则表达式语言特定的细微差别@
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 2010-09-15
  • 2011-06-09
  • 2020-11-09
  • 2010-11-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
相关资源
最近更新 更多