Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql Server 2008上执行整个.sql文件_Sql_Sql Server_Vb.net_Sql Server 2008 - Fatal编程技术网

在sql Server 2008上执行整个.sql文件

在sql Server 2008上执行整个.sql文件,sql,sql-server,vb.net,sql-server-2008,Sql,Sql Server,Vb.net,Sql Server 2008,我正在尝试从vb.net应用程序在SQL Server上执行整个SQL命令文件。问题是,如果SQL文件包含任何CREATE PROCEDURE命令,则会出现以下错误: 发生严重错误。'“创建/更改过程”必须是 查询批处理中的第一条语句。关键字附近的语法不正确 “PROC” 如何通过包含CREATE PROCEDURE命令的SqlConnection执行sql文件?问题是,每个CREATE PROCEDURE都必须是批处理中的第一条语句(错误消息清楚地说明了这一点) 如果要在sql Server

我正在尝试从vb.net应用程序在SQL Server上执行整个SQL命令文件。问题是,如果SQL文件包含任何
CREATE PROCEDURE
命令,则会出现以下错误:

发生严重错误。'“创建/更改过程”必须是 查询批处理中的第一条语句。关键字附近的语法不正确 “PROC”


如何通过包含
CREATE PROCEDURE
命令的
SqlConnection
执行sql文件?

问题是,每个
CREATE PROCEDURE
都必须是批处理中的第一条语句(错误消息清楚地说明了这一点)

如果要在sql Server Management Studio中执行
.sql
,可以使用
GO
作为分隔符:

....
GO 

CREATE PROCEDURE dbo.SomethingOrAnother......
但是这个
GO
是一个特定于SSMS的分隔符,而不是一般的SQL语句

在VB.NET中对sql Server执行完整的
.sql
脚本文件确实没有“神奇”的方法-我通常执行以下步骤:

  • 将整个
    .sql
    文件读入字符串
  • GO
    分隔符上将包含整个脚本的字符串拆分为单独的子字符串
  • 针对SQL Server分别执行此拆分产生的每个片段

这样,任何
创建过程….
都将是单独批处理中的第一条语句,然后您的脚本应该可以在VB.NET中正常工作。

您可以在脚本中保留
GO
分隔符,但您应该使用在

C:\Program Files\Microsoft SQL Server\110\SDK\Assembly
(或适用于您的版本的相应目录)

您需要有对以下程序集的引用(和导入)

  • Microsoft.SqlServer.Smo
  • Microsoft.SqlServer.ConnectionInfo
  • Microsoft.SqlServer.Management.Sdk.Sfc

的可能重复确保在Sql语句之间有一个批处理分隔符
GO
。用“GO”分隔命令会导致以下错误:发生严重错误。“GO”附近的语法不正确。@M.Ali:如果您在SQL Server Management Studio中执行脚本,这会起作用-但是在.NET应用程序中,
GO
不会有帮助。…@M.Ali:不,不太可能。我通常做的是在ssm中使用
.sql
GO
,如果我想从C#执行这个
.sql
,我需要在
GO
分隔符上拆分它,并针对sql Server分别执行每个片段
....
GO 

CREATE PROCEDURE dbo.SomethingOrAnother......
Dim cmd = File.ReadAllText("d:\temp\create.sql")
Using con = new SqlConnection("....")
    Dim svrConnection = new ServerConnection(con)
    Dim server = new Server(svrConnection)
    Dim col = new StringCollection()
    col.Add(cmd)
    server.ConnectionContext.ExecuteNonQuery(col)
End Using