RT,急
最好是用SQL语句实现,由于是应用在程序中,不能使用SQLSERVER管理器操作的方法。
实在不行:曾经用VB的ADO方法
RECORDSET.FIELDS().TYPE得到字段的类型,得到的是数值,请问,每个数值与字段类型的对应关系是什么呢?
还使用RECORDSET.FIELDS().ATRRIBUTES来得到是否是自动增长,是否允许NULL等,请问,每个数值与其相关属性的对应关系是什么?
最好是用SQL语句实现,由于是应用在程序中,不能使用SQLSERVER管理器操作的方法。
实在不行:曾经用VB的ADO方法
RECORDSET.FIELDS().TYPE得到字段的类型,得到的是数值,请问,每个数值与字段类型的对应关系是什么呢?
还使用RECORDSET.FIELDS().ATRRIBUTES来得到是否是自动增长,是否允许NULL等,请问,每个数值与其相关属性的对应关系是什么?
----------------------------------------------------------------------------
你去DOWN一本 SQL SERVER 7 技术内幕,里面有专门的一章,介绍使用VB代码来操控DMO以控制SQL SERVER的文章和一些示例代码.如果你想在你的程序中的,集成一个网络及数据库连接程序(做一个类似于ODBC的东东),那就会非常需要它了...
我正在阅读..呵呵!
1)以复制方式得到表
2)使用Truncate table删除得到的表的副本的数据..Identity列属性归为初始这样可以得到了个空表..
LZ的意思,?是这样的吗?
/*
在查询分析器中调用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
这个部分让程序的使用者(客户)去完成,肯定是不现实的.说到这儿,我倒是有了一个方案:
1)在查询分析器中编写创建数据库,数据表,存储过程,或其它数据库对象的语句,保存为sql文件
(你可以保存为一个,也可以分成几个来保存,为方便调试其中的每一个代码段末尾最好加上GO,切记一定要在查询分析器中一一调试没有错误,也即是在查询分析器中的运行已经可以达到你想要的效果了)2)在VB6环境中建立一个服务器链接(使用ADO或DMO随便,这个部分的例子网上到处都是,我就不粘贴了),当然起码是以数据库管理员的用户来链接的.在此连接的基础上在运行执行1中的.SQL文件.(在VB中写代码读入.sql,并execute执行).
关于上面的第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
select top 0 * into 目的表 from 源表
好了,收工开会去了!
/*
| 注意事项:不传递参数,取默认数据库和密码备份到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