【发布时间】:2011-05-12 23:01:05
【问题描述】:
我想做以下事情。 1) 创建数据库。 2) 创建表、存储过程等时运行脚本(此脚本由 SMS 'generate scripts' 选项创建)
我找到了以下代码:http://www.delphipages.com/forum/showthread.php?t=181685 并将其修改为:
试试
ADOQuery.ConnectionString := 'Provider=SQLOLEDB.1;Password=' +edtPassword.Text + ';Persist Security Info=True;User ID=' + edtUser.Text + ';初始目录=master;数据源=' + edtServerName.Text;
ADOQuery.SQL.Clear; ADOQuery.SQL.Text := 'create DataBase ' + edtWebDBName.Text; ADOQuery.ExecSQL; // should check existance of database ADOWeb.Connected := false; ADOWeb.ConnectionString := 'Provider=SQLOLEDB.1;Password=' +edtPassword.Text + ';Persist Security Info=True;User ID=' + edtUser.Text + ';初始目录=' + edtWebDBName.Text + ';数据源=' + edtServerName.Text; ADOWeb.Connected := true;
ADOQuery.Connection := ADOWeb; ADOQuery.SQL.Clear; ADOQuery.SQL.LoadFromFile(edtScriptFileName.Text); ADOQuery.ExecSQL; except
这一直有效,直到运行脚本文件为止。然后它会生成一个异常:“GO”附近的语法不正确。如果我在新创建的数据库上运行 SMS 中的脚本,那很好。这个问题是否是由于一次运行多个 SQL 命令造成的(脚本本质上是一长串命令/GO 语句?如何解决?
另外,作为奖励,在向它发送脚本之前快速检查新数据库是否真的存在有什么想法吗? (或者如果创建失败会产生异常,就没有必要了吗?)
【问题讨论】:
-
所有这些答案都有效。我认为对于 SMS 生成的脚本,运行 sqlcmd 是要走的路。我也使用下面的来获取数据库计数。 ADOQuery.SQL.Text := 'SELECT COUNT(*) FROM sys.databases WHERE name='+chr(39)+edtWebDBName.Text+chr(39); ADOQuery.打开;如果 ADOQuery.Fields[0].AsInteger = 0 那么 // DB 不存在
标签: sql-server delphi ado