我有一个DB脚本,我从一个文件中读取并将该脚本放在一个字符串变量中。该文件包含多个要执行的DB脚本。现在我想把那个大字符串分解为子字符串,因为我的字符串找到了GO关键字。
我正在使用
myString.split("Go");
- 注意:" Go"关键字对于执行脚本不区分大小写,它可以是" go"," Go"," GO"或任何东西
但它对我不起作用,因为有一些表或数据库名称包含GO,脚本也分开了。
这是我的剧本:
---- Database New_Db_Gomsle
IF NOT EXISTS (SELECT * FROM user_table_gomsle WHERE USER id = 1124)
BEGIN
ALTER TABLE user_table_gomsle
ADD user_img varchar(MAX)
END
Go
--- Database Angolifie_Db
IF NOT EXISTS (SELECT * FROM user_table_Angolifie WHERE USER id = 1124)
BEGIN
ALTER TABLE user_table_gomsle
ADD user_img varchar(MAX)
END
GO
ALTER TABLE gotham_Accessories
ALTER COLUMN stationary_count INT
go
就像退出' Go'脚本中的关键字注释,表名,数据库名称。
我期待结果如
string[] myQueryArray = new string[10];
myQueryArray[0] = "---- Database New_Db_Gomsle
IF NOT EXISTS (SELECT * FROM user_table_gomsle WHERE USER id = 1124)
BEGIN
ALTER TABLE user_table_gomsle
ADD user_img varchar(MAX)
END
Go"
myQueryArray[1] = " --- Database Angolifie_Db
IF NOT EXISTS (SELECT * FROM user_table_Angolifie WHERE USER id = 1124)
BEGIN
ALTER TABLE user_table_gomsle
ADD user_img varchar(MAX)
END
GO"
myQueryArray[2] = "ALTER TABLE gotham_Accessories
ALTER COLUMN stationary_count INT
go"
但是我没有得到这样的结果,因为' Go'数据库名称,表名,注释中的关键字。
答案 0 :(得分:2)
var options = RegexOptions.Multiline | RegexOptions.IgnoreCase;
string[] myQueryArray = Regex.Split(myString, @"^\s*GO\s*$", options);
但即使这个解决方案可能不正确,在这种情况下,如果sql编写如下:
select
ID,
GO
from tableName;
其中GO
- 单行上的列名。
因此,唯一完全有效的解决方案是sql解析器。
答案 1 :(得分:1)
每个脚本后跟一个新行,在字符串中用\ n或\ r \ n表示。
您可以尝试使用" GO \ r"," GO \ n"来分割字符串。或" GO \ r \ n"
答案 2 :(得分:-1)
你可以试试这个:
string test = "select * from table1 GO select * from table2";
string[] myQueryArray = Regex.Split(test, "GO");
希望这会对你有所帮助。感谢。