我正在尝试创建一个程序,这样我就可以在不安装SSMS的情况下运行批处理SQL脚本。
我制作了一个适用于单个查询的基本程序。
If MsgBox("Are you sure you want to execute this code?", MsgBoxStyle.YesNoCancel, "Are you sure?") = MsgBoxResult.Yes Then
Dim cmd As New SqlClient.SqlCommand()
Dim connetionString As String
Dim conn As SqlConnection
Dim sql As String
connetionString = "Data Source=Localhost\database;Initial Catalog=master;Integrated Security=True"
conn = New SqlConnection(connetionString)
sql = RTB_Sql.Text
Try
conn.Open()
cmd.CommandText = sql
cmd.Connection = conn
cmd.ExecuteNonQuery() 'execute query
'AddHandler conn.InfoMessage, New SqlInfoMessageEventHandler(AddressOf OnInfoMessage)
Catch sqlEx As SqlException
MsgBox(sqlEx.Message)
conn.Close()
Catch ex As Exception
MsgBox(ex.Message)
Finally
conn.Close()
End Try
Else
End If
rtb_sql.text是一个包含用户SQL的文本框
我希望这个程序使用Variables,Joins,Updates和If语句来运行批处理语句,但它不能很好地处理它,最终会出错。
SSMS中的代码是合理的,但在此程序中则不然。是否可以将sql
声明为其他可能的东西?
由于
有人可以建议解决方案吗?
谢谢!
答案 0 :(得分:1)
SSMS与您的应用程序之间的最大区别在于SSMS可以批量解析SQL语句,并且您的应用程序将所有语句作为单个命令发送。
因此,在您的应用程序中输入多个语句时,绝对有必要使用分号终止批处理中的每个语句。
例如,此输入将在SSMS中起作用,但可能会导致应用程序出错:
DECLARE @id int
INSERT INTO MyTable (MyColumn) VALUES ('x')
SET @id = @@IDENTITY
SELECT @id
但是这段代码适用于:
DECLARE @id int;
INSERT INTO MyTable (MyColumn) VALUES ('x');
SET @id = @@IDENTITY;
SELECT @id;
没有简单的方法可以解决这个问题。这将是用户培训的问题。