Sql server 如何基于Go word忽略和拆分sql命令

Sql server 如何基于Go word忽略和拆分sql命令,sql-server,vb.net,string,split,Sql Server,Vb.net,String,Split,我有一个包含几个SQL命令的脚本。由于我需要逐个拆分命令,因此我使用goword创建批处理 Dim script = "SELECT * FROM TABLEX; " _ & "go " _ & "----- some coment that includes go word like ago " _ & "INSERT INTO TABLEX .... ;" _ &a

我有一个包含
几个SQL命令的脚本。由于我需要逐个拆分命令,因此我使用
go
word创建批处理

Dim script = "SELECT * FROM TABLEX; " _
             & "go " _
             & "----- some coment that includes go word like ago " _
             & "INSERT INTO TABLEX .... ;" _
             & "go "
For Each sqlBatch As String In script.Split(New String() {"GO", "Go", "go"}, StringSplitOptions.RemoveEmptyEntries)
   'use sqlBatch 
Next
如果脚本有注释,它可以正常工作,但是当它碰巧有
go
word-like
“ago”
时,指令会中断字符串,sql抛出错误,例如,在示例中,我会得到:

SELECT * FROM TABLEX;
----- some coment that includes 
 word like a
INSERT INTO TABLEX .... ;
这显然不是我想要的,我如何告诉你使用
Split
来避免评论,并且在这些
go
word包含的情况下不会失败? 所以我得到:

SELECT * FROM TABLEX;
INSERT INTO TABLEX .... ;
你可以用图书馆。此库中的对象不会被命令之间的GO分隔符所欺骗,您可以使用单个ExecuteOnQuery提交脚本

Imports Microsoft.SqlServer.Management.Common
Imports Microsoft.SqlServer.Management.Sdk.Sfc
Imports Microsoft.SqlServer.Management.Smo
Imports System.Collections.Specialized

' Read the script. It is important to use a StringCollection'
Dim cmd = File.ReadAllText("d:\temp\create.sql")
Dim col = new StringCollection()
col.Add(cmd)

Using con = new SqlConnection(".....")
    Dim svrConnection = new ServerConnection(con)
    Dim server = new Server(svrConnection)
    server.ConnectionContext.ExecuteNonQuery(col)
End Using
要使此代码正常工作,您需要安装Sql Server管理对象库,并添加所需的引用和导入语句

Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Smo.dll
Microsoft.SqlServer.Management.Sdk.sfc.dll
你可以用图书馆。此库中的对象不会被命令之间的GO分隔符所欺骗,您可以使用单个ExecuteOnQuery提交脚本

Imports Microsoft.SqlServer.Management.Common
Imports Microsoft.SqlServer.Management.Sdk.Sfc
Imports Microsoft.SqlServer.Management.Smo
Imports System.Collections.Specialized

' Read the script. It is important to use a StringCollection'
Dim cmd = File.ReadAllText("d:\temp\create.sql")
Dim col = new StringCollection()
col.Add(cmd)

Using con = new SqlConnection(".....")
    Dim svrConnection = new ServerConnection(con)
    Dim server = new Server(svrConnection)
    server.ConnectionContext.ExecuteNonQuery(col)
End Using
要使此代码正常工作,您需要安装Sql Server管理对象库,并添加所需的引用和导入语句

Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Smo.dll
Microsoft.SqlServer.Management.Sdk.sfc.dll

不是在我的开发机器上,但我认为这会起作用:

    For Each sqlBatch As String In script.Split(New String() 
{environment.newline+"GO", 
environment.newline+"Go", 
environment.newline+"go", 
StringSplitOptions.RemoveEmptyEntries)
   'use sqlBatch

不是在我的开发机器上,但我认为这会起作用:

    For Each sqlBatch As String In script.Split(New String() 
{environment.newline+"GO", 
environment.newline+"Go", 
environment.newline+"go", 
StringSplitOptions.RemoveEmptyEntries)
   'use sqlBatch

使用来自的
ScriptSplitter
类完成


使用来自的
ScriptSplitter
类完成



最好的方法是使用比“go”更强大的词来分割字符串。比如“| go |”(“go”被管道字符包围)。你能控制这个脚本是如何创建的吗?更不用说,我可以告诉你人们添加或删除了一些东西,但是脚本可以超过100个句子。最好的方法是使用比“go”更强大的单词来分割字符串。比如“| go |”(“go”被管道字符包围)。你能控制这个脚本是如何创建的吗?更不用说,我可以告诉你人们添加或删除了一些东西,但是脚本可能超过100个句子。批量拆分脚本的目的是执行句子,然后读取结果,结果可以用于其他过程,也可以写入excel或xml。如果我只使用一个ExecuteOnQuery,我怎么能读取所有句子的所有结果?不,当然不能。因此,这也许不是最好的办法。但是如果我记得很清楚的话,这些库中还有一些东西可以用来解析脚本和验证语法。如果我发现一些有用的东西,我会四处看看。我放弃了,找不到任何关于如何使用这个类的简单示例。我和我的朋友都不是,但是越是不费力,批量拆分脚本的目的是执行句子,然后读取结果,结果可以用于其他过程或写入excel或xml。如果我只使用一个ExecuteOnQuery,我怎么能读取所有句子的所有结果?不,当然不能。因此,这也许不是最好的办法。但是如果我记得很清楚的话,这些库中还有一些东西可以用来解析脚本和验证语法。如果我发现一些有用的东西,我会四处看看。我放弃了,找不到任何简单的例子来说明如何使用这门课。我和我的朋友都不是,但是越少投票,效果可能会失败。围棋是在一个空格后写的,不是吗?看起来围棋之前没有空格,但我想你可以加上“围棋”“围棋”和“围棋”因为单词中没有空格,尽管这取决于是否有限定文本,但您可能仍然希望检查换行符。如果在空格后写Go,可能会失败,不是吗?看起来在Go之前没有空格,但我认为您可以添加“Go”“Go”和“Go”因为单词中没有空格,尽管取决于是否有限定文本,您可能仍然希望检查换行符