CREATE DATABASE [searcha]  ON (NAME = N'searcha_Data', FILENAME = N'D:\DATA\searcha_Data.MDF' , SIZE = 788, FILEGROWTH = 10%) LOG ON (NAME = N'searcha_Log', FILENAME = N'D:\DATA\searcha_Log.LDF' , SIZE = 9, FILEGROWTH = 10%)
 COLLATE Chinese_PRC_CI_AS
GOexec sp_dboption N'searcha', N'autoclose', N'false'
GOexec sp_dboption N'searcha', N'bulkcopy', N'false'
GOexec sp_dboption N'searcha', N'trunc. log', N'true'
GOexec sp_dboption N'searcha', N'torn page detection', N'false'
GOexec sp_dboption N'searcha', N'read only', N'false'
GOexec sp_dboption N'searcha', N'dbo use', N'false'
GOexec sp_dboption N'searcha', N'single', N'false'
GOexec sp_dboption N'searcha', N'autoshrink', N'true'
GOexec sp_dboption N'searcha', N'ANSI null default', N'false'
GOexec sp_dboption N'searcha', N'recursive triggers', N'false'
GOexec sp_dboption N'searcha', N'ANSI nulls', N'false'
GOexec sp_dboption N'searcha', N'concat null yields null', N'false'
GOexec sp_dboption N'searcha', N'cursor close on commit', N'false'
GOexec sp_dboption N'searcha', N'default to local cursor', N'false'
GOexec sp_dboption N'searcha', N'quoted identifier', N'false'
GOexec sp_dboption N'searcha', N'ANSI warnings', N'false'
GOexec sp_dboption N'kelonok', N'auto create statistics', N'true'
GOexec sp_dboption N'searcha', N'auto update statistics', N'true'
GOif( ( (@@microsoftversion / power(2, 24) = 8) and (@@microsoftversion & 0xffff >= 724) ) or ( (@@microsoftversion / power(2, 24) = 7) and (@@microsoftversion & 0xffff >= 1082) ) )
exec sp_dboption N'searcha', N'db chaining', N'false'
GO

解决方案 »

  1.   

    写成存储过程,然后在DELPHI里调用
      

  2.   

    ADOCommand1.CommandText := 'exec sp_dboption N'searcha', N'autoclose', N'false'';
    ADOCommand1.Execute;
    一句句执行可以吗
      

  3.   

    脚本中的GO相当于执行一次ADOCommand1.Execute;
      

  4.   

    你的脚本应该是建库脚步,如果是MsSQLServer的话,可以用isql命令行工具来执行.
    isql 实用工具
    isql 实用工具使您得以输入 Transact-SQL 语句、系统过程和脚本文件;并且使用 DB-Library 与 Microsoft® SQL Server™ 2000 进行通讯。语法
    isql
        [-?] |
        [-L] |
        [
            {
                {-U login_id [-P password]}
                | -E
            }
            [-S server_name] [-H wksta_name] [-d db_name]
            [-l time_out] [-t time_out] [-h headers]
            [-s col_separator] [-w column_width] [-a packet_size]
            [-e] [-x max_text_size]
            [-c cmd_end] [-q "query"] [-Q "query"]
            [-n] [-m error_level] [-r {0 | 1}]
            [-i input_file] [-o output_file] [-p]
            [-b] [-O]
        ]详细说明你可以查阅MsSQLServer联机手册
      

  5.   

    你一句一句的append就行了,最后 execute
      

  6.   

    用ADOQuery吧!(1)首先,把你的脚本程序保存成文件的形式,如Database.sql。
    (2)用ADOQuery执行脚本文件。代码如下:
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.LoadFromFile('Database.sql');
    ADOQuery1.ExecSQL;
      

  7.   

    楼上兄弟应该先测一测 j_xuhome说的对的,用
    winexec函数执行isql命令,参数用-i导入脚本
      

  8.   

    用ADOQuery是不行的,如果在ADOQuery中有Go语句会报错。
    两种办法:
    1、用isql
    2、自己拆分SQL语句,再分段载入执行
      

  9.   

    这有个执行SQL脚本的例子,
    通过调用外部程序SQLSERVER的osql.exe来实现,调用时隐藏osql.exe的窗口
    ====================================================================
    unit UtManageData;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons,shellApi, ExtCtrls, DB, ADODB, Grids, DBGrids,ComObj;type
      TFrmManageData = class(TForm)
        GroupBox2: TGroupBox;
        Label3: TLabel;
        meoInfo: TMemo;
        bbtnCreate: TBitBtn;
        bbtnExit: TBitBtn;
        Image1: TImage;
        AdoCon: TADOConnection;
        DataSource1: TDataSource;
        ADOQuery1: TADOQuery;
        cbServer: TComboBox;
        GroupBox1: TGroupBox;
        Label1: TLabel;
        edtUser: TEdit;
        Label2: TLabel;
        edtPassWord: TEdit;
        Bevel1: TBevel;
        procedure bbtnCreateClick(Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure bbtnExitClick(Sender: TObject);  private
        function createDatabase(server,user,passWord : string) : boolean;
        procedure ExecuteOSql(server,user,passWord : string);
        procedure getNetWorkServer;
        { Private declarations }
      public
        { Public declarations }
      end;var
      FrmManageData: TFrmManageData;implementation//uses UtSelectServer;{$R *.dfm}procedure TFrmManageData.bbtnCreateClick(Sender: TObject);
    var
      server,user,passWord : string;
    begin
     server := cbServer.Text;
     user    := edtUser.Text;
     passWord :=edtPassWord.Text;
        
    if createDatabase(server,user,passWord) then   //创建数据库
     begin
          ExecuteOSql(server,user,passWord);  //执行sql脚本创建表
     endend;procedure TFrmManageData.FormActivate(Sender: TObject);
    begin
      getNetWorkServer; //获得服务器
    end;procedure TFrmManageData.bbtnExitClick(Sender: TObject);
    begin
      Close;
    end;function TFrmManageData.createDatabase(server,user,passWord : string): boolean;
    var
      sqlStr : String;
      conStr : String;
      year,month,day : Word;
    begin
       decodeDate(now,year,month,day);
      //Provider=SQLOLEDB.1;Password=ssss;Persist Security Info=True;User ID=sa;Data Source=ZBDI
     //连接数据库
      conStr :='Provider=SQLOLEDB.1;Password='+passWord+';Persist Security Info=False;User ID='+user+';';
      constr := conStr + 'Data Source='+server;
      try
        ADOCon.Close;
        ADOCon.ConnectionString  := conStr;
        ADOCon.ConnectionTimeout := 15;
        ADOCon.Connected := True;
      except    Application.MessageBox('无法建立连接,请确认数据库服务器、用户名、密码是否正确。','警告',MB_ICONWARNING);
        result := False;
        exit;
      end;
          //查找该数据库是否存在
        sqlStr := 'select name from master..sysdatabases where name='+''''+'wz'+intToStr(year)+'''';
        try
          with ADOQuery1 do
          begin
            Close;
            Connection := ADOCon;
            Sql.Add(sqlStr);
            Active := True;
            if RecordCount >0 then
            begin
              Application.MessageBox('该数据库已经存在.','警告',MB_ICONWARNING);
              result := False;
              exit;
            end;
          end;
        except
          Application.MessageBox('无法创建数据库,请确认是否正确安装。','警告',MB_ICONWARNING);
          result := False;
          exit;
        end;
          //创建数据库
      try
        with ADOquery1 do
        begin
           Close;
           Sql.clear;
           Sql.Add('Create DataBase '+'wz'+inttostr(year));
           ExecSql;
        end;
      except
         Application.MessageBox('无法创建数据库,请确认是否正确安装。','警告',MB_ICONWARNING);
         result := False;
         exit;
      end;
      result := True;
     /////end;procedure TFrmManageData.ExecuteOSql(server,user,passWord : string);
    var
      dosStr : String;
      fileName : String;
      year,month,day : Word;
    begin
      //执行 OSQl.exe
      decodeDate(now,year,month,day);
      fileName := ExtractFilePath(Application.ExeName);
      try
        dosStr := ' -S '+server+' -U '+user+' -P '+passWord+' -q '+'"use wz'+inttostr(year)+'"'+' -i '+ filename+'createDB.sql';
     //   showmessage(dosStr);
       
        shellExecute(handle,'open','osql.exe', Pchar(dosStr),nil,sw_hide);
        meoInfo.Clear;
        meoInfo.Font.Color := clred;
        meoInfo.Lines.Add('  正在创建数据库请稍后.....');
        meoInfo.Refresh;
        sleep(3000);
        meoInfo.Clear;
        meoInfo.Lines.Add('成功创建数据库。');
        Application.MessageBox('成功创建数据库。','提示',MB_ICONWARNING);
      except
        Application.MessageBox('无法创建数据库,请确认是否正确安装。','警告',MB_ICONWARNING)
      end;
    end;procedure TFrmManageData.getNetWorkServer;
    var
       SQLServer:Variant;
       ServerList:Variant;
       i,nServers:integer;
       sRetValue:String;
    begin      //获得局域网上的服务器
     try
      Application.ProcessMessages;
      SQLServer := CreateOleObject('SQLDMO.Application');
      ServerList:= SQLServer.ListAvailableSQLServers;
      nServers:=ServerList.Count;
      cbServer.Clear;
      for i := 1 to nservers do
        cbServer.Items.Add(ServerList.Item(i));
      SQLServer:=NULL;
      serverList:=NULL;
      cbServer.ItemIndex := 0;
     except
       application.MessageBox('无法找到可用的数据库服务器。','警告!',MB_ICONWARNING);
      // APPLICATION.Terminate;
     end;
    end;end.
      

  10.   

    ShellExecute(Handle,'open','osql.exe ',pchar('-Usa -P  -d test -i'+sqlpath),'',SW_hide);
    是可以的 
    但是要指定osql.exe的绝对路径,否则第一次运行的时候就不会执行。-------------------------
    抄一下SQL Server联机帮助的解释:(哈哈哈~~~)
    bcp 实用工具
    bcp 实用工具在 Microsoft® SQL Server™ 2000 实例和数据文件之间以用户指定的格式复制数据。
    语法
    bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
        {in | out | queryout | format} data_file
        [-m max_errors] [-f format_file] [-e err_file]
        [-F first_row] [-L last_row] [-b batch_size]
        [-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
        [-q] [-C code_page] [-t field_term] [-r row_term]
        [-i input_file] [-o output_file] [-a packet_size]
        [-S server_name[\instance_name]] [-U login_id] [-P password]
        [-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]