对于我的应用程序的特定安装,我需要从安装程序本身在SQL服务器上创建数据库和架构。我有一个自定义安装程序,通过它我可以检测并安装先决条件和软件。系统会提示用户提供数据库服务器的IP以及用户名和密码。在场景后面,我创建了一个连接和一个命令对象。我将查询保存在不同的文件中。我使用阅读器并读取文件的内容,并将文件的内容设置为命令对象的CommandText
。该文件的典型内容如下:
create database mydatabase
Go
Use mydatabase
Go
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"
现在问题是第一个语句被执行但在此之后它会出错。显示的错误是:“syntax error near 'GO'
”。我尝试删除GO语句,并尝试用分号结束sql语句。这种情况下的错误是“Database 'mydatabase'does not exist. Make sure that the name is entered correctly.
”。
但是如果我在文件中保留一个语句,它就可以正常工作。
有人能帮助我吗?
答案 0 :(得分:4)
正如您在http://technet.microsoft.com/en-us/library/aa258908%28SQL.80%29.aspx
所见说明
GO不是Transact-SQL语句;它 是osql识别的命令 和isql实用程序和SQL查询 分析器。
因此,当您使用.Net的SqlCommand运行它时,这就是您遇到问题的原因。 在我看来,你有两个选择:
1)逐个执行说明。也许在文件中使用分隔符,然后拆分SQL语句并使用for / foreach顺序执行它们。
2)使用SQL Server管理对象(SMO)中的Server类,它允许您执行包含“Go”语句的脚本。
答案 1 :(得分:1)
只需添加“;”即可执行多个sql命令语句在每个命令的末尾而不是“GO”语句。
示例:
cmd.CommandText = @" Update TableA Set ColumnA = 'Test' Where ID = 1;
Update TableB Set ColumnA = 'Second line' Where ID = 2;
";