RT,急
最好是用SQL语句实现,由于是应用在程序中,不能使用SQLSERVER管理器操作的方法。
实在不行:曾经用VB的ADO方法
RECORDSET.FIELDS().TYPE得到字段的类型,得到的是数值,请问,每个数值与字段类型的对应关系是什么呢?
还使用RECORDSET.FIELDS().ATRRIBUTES来得到是否是自动增长,是否允许NULL等,请问,每个数值与其相关属性的对应关系是什么?

解决方案 »

  1.   

    可以使用DMO来操作...
    ----------------------------------------------------------------------------
    你去DOWN一本 SQL SERVER 7 技术内幕,里面有专门的一章,介绍使用VB代码来操控DMO以控制SQL SERVER的文章和一些示例代码.如果你想在你的程序中的,集成一个网络及数据库连接程序(做一个类似于ODBC的东东),那就会非常需要它了...
    我正在阅读..呵呵!
      

  2.   

    如果是仅仅需要一张目的标的结构,可以这样..
    1)以复制方式得到表
    2)使用Truncate table删除得到的表的副本的数据..Identity列属性归为初始这样可以得到了个空表..
    LZ的意思,?是这样的吗?
      

  3.   

    --邹老大的存储过程,参考下
    /*
     在查询分析器中调用sqldmo生成脚本--存储过程邹建 2003.07-----------------*//*--调用实例
    declare @str varchar(8000)
     exec sp_getscript '10.1.22.134','sa','ylwtsmtzlp','BackTable','test',@str output
     print @str
    */
    if exists(select 1 from sysobjects where id=object_id('sp_getscript') and objectproperty(id,'IsProcedure')=1)
     drop procedure sp_getscript
    go
    create procedure sp_getscript
     @servername varchar(50)      --服务器名
     ,@userid varchar(50)       --用户名,如果为nt验证方式,则为空
     ,@password varchar(50)      --密码
     ,@databasename varchar(50)    --数据库名称
     ,@objectname varchar(250)     --对象名
     ,@re varchar(8000) output     --返回脚本
    as
    declare @srvid int,@dbsid int    --定义服务器、数据库集id
    declare @dbid int,@tbid int     --数据库、表id
    declare @err int,@src varchar(255), @desc varchar(255) --错误处理变量--创建sqldmo对象
    exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output
    if @err<>0 goto lberr--连接服务器
    if isnull(@userid,'')='' --如果是 Nt验证方式
    begin
     exec @err=sp_oasetproperty @srvid,'loginsecure',-1
     if @err<>0 goto lberr exec @err=sp_oamethod @srvid,'connect',null,@servername
    end
    else
     exec @err=sp_oamethod @srvid,'connect',null,@servername,@userid,@passwordif @err<>0 goto lberr--获取数据库集
    exec @err=sp_oagetproperty @srvid,'databases',@dbsid output
    if @err<>0 goto lberr--获取要取得脚本的数据库id
    exec @err=sp_oamethod @dbsid,'item',@dbid output,@databasename
    if @err<>0 goto lberr--获取要取得脚本的对象id
    exec @err=sp_oamethod @dbid,'getobjectbyname',@tbid output,@objectname
    if @err<>0 goto lberr--取得脚本
    exec @err=sp_oamethod @tbid,'script',@re output
    if @err<>0 goto lberr--print @re
    returnlberr:
     exec sp_oageterrorinfo NULL, @src out, @desc out 
     declare @errb varbinary(4)
     set @errb=cast(@err as varbinary(4))
     exec master..xp_varbintohexstr @errb,@re out
     select 错误号=@re, 错误源=@src, 错误描述=@desc
     return
      

  4.   

    其实,通过查询分析器可以完成初始库的数据化,但上面的代码只能在查询分析器中手工运行...
    这个部分让程序的使用者(客户)去完成,肯定是不现实的.说到这儿,我倒是有了一个方案:
    1)在查询分析器中编写创建数据库,数据表,存储过程,或其它数据库对象的语句,保存为sql文件
      (你可以保存为一个,也可以分成几个来保存,为方便调试其中的每一个代码段末尾最好加上GO,切记一定要在查询分析器中一一调试没有错误,也即是在查询分析器中的运行已经可以达到你想要的效果了)2)在VB6环境中建立一个服务器链接(使用ADO或DMO随便,这个部分的例子网上到处都是,我就不粘贴了),当然起码是以数据库管理员的用户来链接的.在此连接的基础上在运行执行1中的.SQL文件.(在VB中写代码读入.sql,并execute执行).
      

  5.   

    上面的方案是可行的.
    关于上面的第2点,<在VB6中执行.SQL文件以初始化数据库>,也给楼主贴出代码..已编好的函数:
    ----------------------------------------------------------------------------------
    [VB] 执行SQL脚本文件(.sql)的两种方法 
    1.
    Public Sub ExecuteSQLScriptFile(cn as ADODB.Connection,sqlFile As String)
    Dim strSql As String, strTmp As String
            
          Open sqlFile For Input As #1
          strSql = ""
          Do While Not EOF(1)
              Line Input #1, strTmp
              If UCase$(strTmp) = "GO" Then
                  cn.Execute strSql
                  strSql = ""
              Else
                  strSql = strSql & strTmp & vbCrLf
              End If
          Loop
          If strSql <> "" Then cn.Execute strSql
          Close #1
    End Sub2.
    Public Sub ExecuteSQLScriptFile(cn as ADODB.Connection,sqlFile As String)
    Dim sql as string        sql="master.dbo.xp_cmdshell ' osql -U username -P password -i " & sqlFile
           cn.execute sql
    End Sub
      

  6.   

    导出表结构?
    select top 0 * into   目的表 from 源表
      

  7.   

    楼主要切记,在使有查询分析器编写生成数据库、表及其它对象的SQL脚本的时候,最好是每一个功能段后面加上GO,以使程序分为小片段,在VB中的调用执行是按小片段一段一段的执行的.希望按上面的做法,你得达到你想要的.
    好了,收工开会去了!
      

  8.   

    --SQL server 2000 可以用 scptxfr.exe 方法导出脚本
    /*
      | 注意事项:不传递参数,取默认数据库和密码备份到D:\数据库脚本备份\
      |           该存储过程如果建立在master库,以 SP_命名,则所有用户数据库均可以调用该存储过程该存储过程,不支持SQL Server 2000 SP4以下补丁下运行,运用该存储过程,必须打SQL Sp4 补丁。
    如发现Bug: [email protected]
    调用: P_GetJenerateCurrentDBObjectsScript '','','密码'*/
    Create PROC P_GetJenerateCurrentDBObjectsScript
    @ServerName varchar(20)='',--要备份的服务器名称,不指定则备份当前服务器
    @dbname varchar(20)='',--要备份的数据库名称,不指定则备份当前数据库
    @Password varchar(20)='',--密码
    @BackupPath varchar(200)='D:\数据库脚本备份\'--文件保存路径
    As
    Begin
    declare @Path  varchar(400),@Cmd varchar(1000)
    exec  master.dbo.xp_regread    
               'HKEY_LOCAL_MACHINE',  
               'SOFTWARE\Microsoft\MSSQLSERVER\setup',  
               'SQLPath',@Path  output  
    set  @Path  = ''''+replace(@Path,':\',':\"')+'"'  +  '\Upgrade\scptxfr.exe'  
    set @Cmd='master.dbo.xp_cmdshell '+@Pathif isnull(@ServerName,'')='' set @ServerName=@@ServerName
    if isnull(@dbname,'')='' set @dbname=DB_NAME()--生成文件夹和目录
    set @Cmd=@Cmd+N'  /s '+@ServerName+' /d '+@dbname+' /p '+@Password+' /I /f  '
    set @BackupPath='MD '+@BackupPath+''+@dbname+''
    exec master..xp_cmdshell @BackupPath
    --生成数据库脚本
    set @Cmd=@Cmd+N''+REPLACE(@BackupPath,'MD','')+'\'+convert(varchar(10),getdate(),112)+'.sql'''
    exec(@Cmd)
    End
    GO