DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: eyang11
今日帖子: 21
在线用户: 10
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 wittt (delphi小生) ★☆☆☆☆ -
盒子活跃会员
2003/11/7 23:07:14
标题:
请高手指点!SQL脚本如何导入SQL SERVER? 浏览:2561
加入我的收藏
楼主: 我通过SQL SERVER生成了所有一个数据库的脚本,如何编程把
SQL脚本生成数据库导入SQL SERVER?
----------------------------------------------
wittt
作者:
男 bryan (bao) ★☆☆☆☆ -
盒子活跃会员
2003/11/8 12:00:13
1楼: 最简单的是通过查询分析器运行脚本,要用程序方式的话,可以用
Query或者Adoquery来运行脚本,但要求脚本按照一个对象一个文件的方式产生,
因为脚本中的"go"在程序中不识别.程序中循环执行这些脚本就可以了.

  query1.sql.loadfromfile('c:\sql\table1.sql')
  query1.execsql;

----------------------------------------------
-
作者:
男 windows.net (windows.net) ★☆☆☆☆ -
盒子活跃会员
2003/11/8 14:59:46
2楼: 四种方法:
    1分段读取sql脚本到adoquery中,判断Go,分段执行sql脚本语句,但是这样不能执行带存储过程的脚本.(谁可以解决把sql脚本读入程序中并且在程序中执行sql脚本在客户端生成sql数据库)
    
    2用isql的方法,可惜只能在装sql服务器的服务器上执行,不能在客户端执行
    
    3用数据库备份的方法,然后在用restore database 的方法,也只能在服务器上执行.

    4使用installshield安装程序,在安装完成后使用他的脚本文件来执行远程安装数据库!
    这是我在delphibbs中查找到的方法,但是我看有些程序都有一个单独的安装数据库的执行文件可以在任何地方执行安装数据库的.
谁有第一种方法的源代码
----------------------------------------------
| | 凡事无绝对 | | 不须太强求 | |
作者:
男 bryan (bao) ★☆☆☆☆ -
盒子活跃会员
2003/11/8 16:02:40
3楼: 这是我以前用过的delphi创建数据库的代码,提供参考.

procedure TForm2.CreateDatabase(DBName:String);
Var SDBPath:String;
begin
   If DbName<>' Then Begin
      With Adoquery1 do Begin
         close;
         sql.text :='Select Name from master..sysdatabases with (nolock) where Name='+''+DBName+'';
         Open;
         If not Adoquery1.eof Then Begin
            //获得数据库存放目录,不知道怎样获得默认数据库目录,只好那master的了
            close;
            sql.text :='Select fileName from master..sysdatabases with (nolock) where Name='master' ';
            Open;
            SDBPath := IncludeTrailingBackslash(ExTractFilePath(FieldByname('filename').asstring));
            //

            // 创建数据库
            Active := False;
            SQL.clear;
            SQL.add('Create Database '+DBName);
            SQL.add('ON PRIMARY');
            SQL.add('(Name='+DBName+'_Data,');
            SQL.add('FileName='+''+SDBPath+DBName+'_Data.mdf'+''+')');
            SQL.add('Log On');
            SQL.add('(Name='+DBName+'_Log,');
            SQL.add('FileName='+''+SDBPath+DBName+'_Log.ldf'+''+')');
            ExecSQL;
            //
            Showmessage('database Created!');
         End
         Else Begin
            Showmessage('database exists!');
         End;
      End;
   End;
end;

----------------------------------------------
-
作者:
男 windows.net (windows.net) ★☆☆☆☆ -
盒子活跃会员
2003/11/8 16:13:42
4楼: 这个是创建数据库,通过sql脚本创建表和数据你并没有实现!
----------------------------------------------
| | 凡事无绝对 | | 不须太强求 | |
作者:
男 bryan (bao) ★☆☆☆☆ -
盒子活跃会员
2003/11/8 16:26:02
5楼: 前面写了,我产生SQL的脚本是分开的,每个table都有一个独立脚本,所以
产生表就很简单了(存储过程等其它对象用这样的方式也可以):
  query1.sql.loadfromfile('c:\sql\table1.sql')
  query1.execsql;
  ..
  query1.sql.loadfromfile('c:\sql\table2.sql')
  query1.execsql;
  ..
 
数据有两种做法:
   1.将原来有的数据导出到一些本地表中(DBF,DB等),安装文件也将这些文件
     打包进去,安装时就将其再拷贝回SQL Table中就可以了.

   2.将原有的数据也产生insert语句的脚本,象这样 
       insert into table1 (field1,field2,..) values (value1,value2,..)
       insert into table1 (field1,field2,..) values (value1,value2,..)
       ...
     安装时运行之即可. 
     

----------------------------------------------
-
作者:
男 windows.net (windows.net) ★☆☆☆☆ -
盒子活跃会员
2003/11/8 19:17:51
6楼: 这个只能针对表比较少的,如果有个100个左右,我的数据库有400多个表,用这个真的要晕死了,在delphibbs上看到有Tsqlscript的控件,就是不知有没有,等下研究看用dbexpress能不能解决!
谢谢楼上的提供解决方法
----------------------------------------------
| | 凡事无绝对 | | 不须太强求 | |
作者:
男 bryan (bao) ★☆☆☆☆ -
盒子活跃会员
2003/11/8 21:02:04
7楼: 闲来无事,写了段代码,你参考一下,产生的sql脚本要以MS DOS文本的格式,
否则读不出来.

procedure TForm1.Button1Click(Sender: TObject);
Var SList:TStringList;
    I,J:integer;
begin
  SList := TStringList.create;
  Try
     SList.LoadFromFile('c:\temp\SetupSQL.sql');
     Query1.SQL.Clear;
     J:=0;
     For i := 0 to SList.Count-1 do Begin
        If Trim(SList[I])<>' Then Begin
           If Sametext(Trim(SList[I]),'go') Then Begin
              If Trim(Query1.SQL.text)<>' Then Begin
                 Query1.ExecSQL;
                 Query1.SQL.Clear;
                 Inc(J);
                 Label1.caption := Inttostr(J)+' Objectes Created!';
              End;
           End
           Else Begin
              Query1.SQL.Add(SList[I]);
           End;
        End;
        Application.ProcessMessages;
     End;
  Finally
     SList.free;
  End;

end;
----------------------------------------------
-
作者:
男 windows.net (windows.net) ★☆☆☆☆ -
盒子活跃会员
2003/11/9 3:20:49
8楼: 谢谢你,没想到你和我写的代码一样!呵呵
----------------------------------------------
| | 凡事无绝对 | | 不须太强求 | |
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行93.75毫秒 RSS