我的程序是想使用数据库脚本文件来创建数据库,当然包括创建表,视图和存储过程。
我在程序中对脚本的操作是:读出一条完整的语句然后执行,这样循环读完后表,视图,存储过程也就相应的都创建出来了 。
现在碰到的问题是:创建视图的脚本语句是随机生成的,并没有按照顺序来生成。这个样子导致的结果是——如果第一个试图在创建中用到了第二个视图,而第二个视图现在还不存在,这样就要产生异常了,所以现在想问一下,有什么办法可以在生成脚本的时候避免这种情况,让他们能够自动排序。或是有别的办法也可以。
我在程序中对脚本的操作是:读出一条完整的语句然后执行,这样循环读完后表,视图,存储过程也就相应的都创建出来了 。
现在碰到的问题是:创建视图的脚本语句是随机生成的,并没有按照顺序来生成。这个样子导致的结果是——如果第一个试图在创建中用到了第二个视图,而第二个视图现在还不存在,这样就要产生异常了,所以现在想问一下,有什么办法可以在生成脚本的时候避免这种情况,让他们能够自动排序。或是有别的办法也可以。
解决方案 »
- XML 解析问题
- |ZYCWPF| 在MVVM中的ViewModel,要不要把当前的Window传递进去了,如果不传的话如何在ViewModel中去关闭这个窗口 谢谢
- Sql Server数据库里看到字段的值末尾有空格,但是trim不掉
- C# 求一正则表达式
- DropDownList里面的字符太长,怎么不改变它的宽,让字符显示全?
- Allchina.cn招聘C#.net程序员(北京地区)
- 如何写在局域网里访问共享文件夹(必须用户名及密码)?
- 关于一个自定义控件的问题,大家帮我看看!
- 求助:Visual C# 2005 速成版的测试版 2怪事二则
- VC#自带的水晶报表问题:如何让水晶报表显示已经显示在DataGrid中的数据?
- 如何把DataList设成分页的?
- dataset中datatable问题
那有没有别的什么工具用来给脚本排序的?jinjazz(近身剪(充电中...)) 谢谢你啊,又碰见你。
或者自己写程序来控制/*
在查询分析器中调用sqldmo生成脚本--函数邹建 2003.07-----------------*//*--调用实例
print dbo.fgetscript('zj','','','xzkh_sa','syscolumns')/*--得到所有对象的脚本
declare @name varchar(250)
declare #aa cursor for
select name from sysobjects where xtype not in('S','PK','D','X','L')
open #aa
fetch next from #aa into @name
while @@fetch_status=0
begin
print dbo.fgetscript('zj','','','xzkh_sa',@name)
fetch next from #aa into @name
end
close #aa
deallocate #aa
--*/
*/
if exists(select 1 from sysobjects where id=object_id('fgetscript') and objectproperty(id,'IsInlineFunction')=0)
drop function fgetscript
gocreate function fgetscript(
@servername varchar(50) --服务器名
,@userid varchar(50)='sa' --用户名,如果为nt验证方式,则为空
,@password varchar(50)='' --密码
,@databasename varchar(50) --数据库名称
,@objectname varchar(250) --对象名) returns varchar(8000)
as
begin
declare @re varchar(8000) --返回脚本
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,@password if @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
return(@re)lberr:
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
set @re='错误号: '+@re
+char(13)+'错误源: '+@src
+char(13)+'错误描述: '+@desc
return(@re)
end
go