Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
|
|||
|---|---|---|---|
|
#18+
Добрый день! Подскажите пожалуйста как правильно решить такую проблему: У нас раньше стоял Sybase ASE 12.5.0 под Windows 2000 . Мы скрипты прокси-таб лиц выгружали так: call ddlgen -Uuser -Ppassword -Sserver:port -TU -XOD -N%%%% -Dbase -Oresult.sql>log Но недавно установили новый сервер Sybase ASE 12.5.3 под Linux 64 bit . И call ddlgen -Uuser -Ppassword -Sserver:port -TU -XOD -N%%%% -Dbase -Oresult.sql>log уже не работает . Скрипты обычных таблиц мы формируем таким скриптом (см. ниже Приложение 1 ). А как можно правильный скрипт прокси-таблицы получить без ddlgen ? Если пытаться получать скриптом от обычной таблицы приведенном в приложении 1, то получаем неправильный скрипт, такой будто это не прокси. Что посоветуете ? Заранее спасибо за ответ .Женя. Приложение 1: ---------- начало скрипта формирования скрипта таблицы --------------------- set nocount on go print "set nocount on" print "go" print "" go print "declare @s varchar(32)" print "select @s=@@servername" print "print 'current server=%%1!',@s" print "select @s=db_name()" print "print 'current db=%%1!',@s" print "print ''" print "go" print "" go declare @s varchar(32) select @s=db_name() print "print '-------------------------------------'" print "print 'from server.db=%1!.%2!'",@@servername,@s print "print '-------------------------------------'" print "go" print "" go create table #t( param varchar(32) not null ) go /*----------------------- from here -------------------------------*/ insert into #t(param) values ("name_table") /*--------------------------------------------------------------*/ go declare ccur cursor for select o.name as tbl_name, user_name(o.uid) as user_name,o.sysstat2,o.crdate from sysobjects o,#t t where o.type="U" and o.name=t.param order by user_name(o.uid),o.name go declare @full_name varchar(64) go declare @i int, @user_name varchar(32), @tbl_name varchar(32), @idcol int, @status int, @length int, @col_name varchar(32), @scale int, @usertype int, @type_name varchar(32), @prec int, @s varchar(255), @sysstat2 int, @cdefault int, @s_def varchar(255), @crdate datetime, @dbname varchar(32) select @i=0 open ccur while(1=1) begin fetch ccur into @tbl_name,@user_name,@sysstat2,@crdate if @@sqlstatus<>0 break select @i=@i+1,@dbname=db_name() print "print '%1!.%2! [%3!] created at %4! on srv %5!.%6!' ", @user_name,@tbl_name,@i,@crdate,@@servername,@dbname print "if exists( select * from sysobjects o " print " where o.name='%1!' ",@tbl_name print " and o.uid=user_id('%1!') ",@user_name print " and o.type='U' ) begin" print " print '!!! Warning !!! table %1!.%2! already exists'",@user_name,@tbl_name print " /* drop table %1!.%2! */ ",@user_name,@tbl_name print "end" print "else begin" print " CREATE TABLE %1!.%2! (",@user_name,@tbl_name select @idcol=0 while(1=1) begin select @idcol=c.colid,@status=c.status,@length=c.length, @col_name=c.name,@prec=c.prec,@scale=c.scale, @usertype=c.usertype ,@type_name=t.name ,@cdefault=c.cdefault from syscolumns c,systypes t where c.id=object_id(@user_name+'.'+@tbl_name) and c.usertype=t.usertype and c.colid=@idcol+1 if @@rowcount<1 break if @idcol=1 select @s=" "+convert(char(30),@col_name) else select @s=" , "+convert(char(30),@col_name) if @type_name='numericn' select @type_name='numeric' select @s=@s+" "+convert(char(30),@type_name) if (@prec is not null) select @s=@s+convert(char(9),' ('+convert(varchar(3),@prec)+','+convert(varchar(3),@scale)+')') else if @usertype in (1,2,3,4,10,24,25,26,27,28) select @s=@s+convert(char(9),' ('+convert(varchar(3),@length)+')') else select @s=@s+replicate(" ",9) if (@cdefault is not null) and (@cdefault<>0) begin select @s_def=ltrim(rtrim(text)) from syscomments where id=@cdefault if @@rowcount>0 select @s=@s+' '+@s_def+' ' end if (@status & 128)=128 select @s=@s+" identity " if (@status & 8)=8 select @s=@s+" null" else select @s=@s+" not null" print "%1!",@s end print " )" select @s=null select @s=s.name from sysindexes i,syssegments s where i.id=object_id(@user_name+'.'+@tbl_name) and i.indid>0 and i.indid<255 and (i.status &16)=16 and i.segment=s.segment if @@rowcount=0 select @s=s.name from sysindexes i,syssegments s where i.id=object_id(@user_name+'.'+@tbl_name) and i.indid=0 and i.segment=s.segment print " on '%1!'",@s print "end" print "go" print "if (@@error=0)" print " print 'Ok'" print "else " print " print 'create table %1!.%2! Failed !!! [%3!]' ",@user_name,@tbl_name,@i print "go" print "" end close ccur go deallocate cursor ccur go print "print '------------------ pk_uk ----------------------'" print "" go set nocount on go declare ccur cursor for select user_name(o.uid) as user_name, o.name,i.name as iname, i.status,i.status2,i.keycnt, i.indid ,s.name as seg_name from sysobjects o,sysindexes i, syssegments s,#t t where o.type='u' and i.id=o.id and i.indid>0 and i.indid>0 and ((i.status2 & 2)=2) and s.segment=i.segment and t.param=o.name order by ((i.status & 2048) ) desc , user_name(o.uid),o.name,i.indid go declare @user_name varchar(32), @tbl_name varchar(32), @index_name varchar(32), @status int, @status2 int, @keycnt int, @indid int, @segment varchar(32), @s varchar(255), @i int, @z int, @skeys varchar(255) select @i=0 open ccur while(1=1) begin fetch ccur into @user_name,@tbl_name,@index_name,@status,@status2,@keycnt,@indid,@segment if @@sqlstatus<>0 break select @s="",@i=@i+1,@z=1,@skeys="" print "print '%1!.%2! %3! [%4!]'",@user_name,@tbl_name,@index_name,@i print "alter table %1!.%2! ",@user_name,@tbl_name select @s="add constraint "+@index_name+" " if (@status & 2048)=2048 select @s=@s+"primary key " else select @s=@s+"unique " if (@status & 16)=16 select @s=@s+ " clustered" else select @s=@s+" nonclustered " while(@z<=@keycnt ) begin if ((@status & 16)=0) and (@z=@keycnt) break if @z=1 select @skeys=index_col(@user_name+'.'+@tbl_name,@indid,@z) else select @skeys=@skeys+', '+index_col(@user_name+'.'+@tbl_name,@indid,@z) select @z=@z+1 end select @s=@s+'('+@skeys+') on '+'"'+@segment+'"' print "%1!",@s print "go" print "if @@error<>0" print " print 'alter table %1!.%2! %3! failed [%4!]'", @user_name,@tbl_name,@index_name,@i print "else" print " print 'Ok'" print "go" print "" end close ccur go deallocate cursor ccur go print "print '----------------------foreign keys--------------'" print"" go declare ccur cursor for select constrid,tableid,reftabid, fokey1,fokey2,fokey3,fokey4,fokey5,fokey6, fokey7,fokey8,fokey9,fokey10,fokey11,fokey12, fokey13,fokey14,fokey15,fokey16, refkey1,refkey2,refkey3,refkey4,refkey5,refkey6, refkey7,refkey8,refkey9,refkey10,refkey11,refkey12, refkey13,refkey14,refkey15,refkey16, frgndbid,pmrydbid from sysreferences s,#t t where s.tableid=object_id(t.param) order by object_name(tableid),object_name(constrid) go declare @constrid int, @tableid int, @reftabid int, @fokey1 int, @fokey2 int, @fokey3 int, @fokey4 int, @fokey5 int, @fokey6 int, @fokey7 int, @fokey8 int, @fokey9 int, @fokey10 int, @fokey11 int, @fokey12 int, @fokey13 int, @fokey14 int, @fokey15 int, @fokey16 int, @refkey1 int, @refkey2 int, @refkey3 int, @refkey4 int, @refkey5 int, @refkey6 int, @refkey7 int, @refkey8 int, @refkey9 int, @refkey10 int, @refkey11 int, @refkey12 int, @refkey13 int, @refkey14 int, @refkey15 int, @refkey16 int, @frgndbid int,@pmrydbid int, @i int, @fokey varchar(255), @refkey varchar(255), @fname varchar(32), @s varchar(255) select @i=0 open ccur while(1=1) begin fetch ccur into @constrid,@tableid,@reftabid, @fokey1,@fokey2,@fokey3,@fokey4,@fokey5,@fokey6, @fokey7,@fokey8,@fokey9,@fokey10,@fokey11,@fokey12, @fokey13,@fokey14,@fokey15,@fokey16, @refkey1,@refkey2,@refkey3,@refkey4,@refkey5,@refkey6, @refkey7,@refkey8,@refkey9,@refkey10,@refkey11,@refkey12, @refkey13,@refkey14,@refkey15,@refkey16, @frgndbid,@pmrydbid if @@sqlstatus<>0 break select @i=@i+1 select @fokey=col_name(@tableid, @fokey1 , @frgndbid) if col_name(@tableid, @fokey2 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey2 , @frgndbid) if col_name(@tableid, @fokey3 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey3 , @frgndbid) if col_name(@tableid, @fokey3 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey3 , @frgndbid) if col_name(@tableid, @fokey4 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey4 , @frgndbid) if col_name(@tableid, @fokey5 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey5 , @frgndbid) if col_name(@tableid, @fokey6 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey6 , @frgndbid) if col_name(@tableid, @fokey7 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey7 , @frgndbid) if col_name(@tableid, @fokey8 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey8 , @frgndbid) if col_name(@tableid, @fokey9 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey9 , @frgndbid) if col_name(@tableid, @fokey10 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey10 , @frgndbid) if col_name(@tableid, @fokey11 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey11 , @frgndbid) if col_name(@tableid, @fokey12 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey12 , @frgndbid) if col_name(@tableid, @fokey13 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey13 , @frgndbid) if col_name(@tableid, @fokey14 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey14 , @frgndbid) if col_name(@tableid, @fokey15 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey15 , @frgndbid) if col_name(@tableid, @fokey16 , @frgndbid) is not null select @fokey=@fokey+','+ col_name(@tableid, @fokey16 , @frgndbid) select @refkey=col_name(@reftabid, @refkey1 , @pmrydbid) if col_name(@reftabid, @refkey2 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey2 , @pmrydbid) if col_name(@reftabid, @refkey3 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey3 , @pmrydbid) if col_name(@reftabid, @refkey3 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey3 , @pmrydbid) if col_name(@reftabid, @refkey4 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey4 , @pmrydbid) if col_name(@reftabid, @refkey5 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey5 , @pmrydbid) if col_name(@reftabid, @refkey6 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey6 , @pmrydbid) if col_name(@reftabid, @refkey7 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey7 , @pmrydbid) if col_name(@reftabid, @refkey8 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey8 , @pmrydbid) if col_name(@reftabid, @refkey9 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey9 , @pmrydbid) if col_name(@reftabid, @refkey10 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey10 , @pmrydbid) if col_name(@reftabid, @refkey11 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey11 , @pmrydbid) if col_name(@reftabid, @refkey12 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey12 , @pmrydbid) if col_name(@reftabid, @refkey13 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey13 , @pmrydbid) if col_name(@reftabid, @refkey14 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey14 , @pmrydbid) if col_name(@reftabid, @refkey15 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey15 , @pmrydbid) if col_name(@reftabid, @refkey16 , @pmrydbid) is not null select @refkey=@refkey+','+ col_name(@reftabid, @refkey16 , @pmrydbid) select @fname=object_name(@constrid) print "print '%1! [%2!]' ",@fname,@i select @s=user_name(uid)+'.'+name from sysobjects where id=@tableid print "alter table %1!",@s print " add constraint %1! foreign key (%2!)",@fname,@fokey select @s=user_name(uid)+'.'+name from sysobjects where id=@reftabid print " references %1! (%2!)",@s,@refkey print "go" print "if (@@error=0)" print " print 'Ok'" print "else" print " print 'add %1! [%2!] Failed !!!'",@fname,@i print "" end close ccur go deallocate cursor ccur go print "print '----------------------indexes -------------------'" print "" go declare ccur cursor for select user_name(o.uid) as user_name, o.name,i.name as iname, i.status,i.status2,i.keycnt, i.indid,s.name as seg_name from sysobjects o,sysindexes i ,syssegments s,#t t where o.type='u' and i.id=o.id and i.indid<255 and i.indid>0 and ((i.status2 & 2)=0) and s.segment=i.segment and t.param=o.name order by user_name(o.uid),o.name,i.name go declare @user_name varchar(32), @tbl_name varchar(32), @index_name varchar(32), @status int, @status2 int, @keycnt int, @indid int, @segment varchar(32), @s varchar(255), @i int, @z int, @skeys varchar(255) select @i=0 open ccur while(1=1) begin fetch ccur into @user_name,@tbl_name,@index_name,@status,@status2,@keycnt,@indid,@segment if @@sqlstatus<>0 break select @s="",@i=@i+1,@z=1,@skeys="" if (@status & 2)=2 select @s="unique " else select @s="" if (@status & 16)=16 select @s=@s+"clustered" else select @s=@s+"nonclustered" print "print '%3! (%1!.%2!) [%4!]'",@user_name,@tbl_name,@index_name,@i print "create %2! index %1!",@index_name,@s while(@z<=@keycnt ) begin if ((@status & 16)=0) and (@z=@keycnt) break if @z=1 select @skeys=index_col(@user_name+'.'+@tbl_name,@indid,@z) else select @skeys=@skeys+', '+index_col(@user_name+'.'+@tbl_name,@indid,@z) select @z=@z+1 end select @s=' on '+@user_name+'.'+@tbl_name+'('+@skeys+')' print "%1!",@s if ((@status & 16)=16) and ( (@status & 64)=64) print " with ALLOW_DUP_ROW" select @s=' on '+'"'+@segment+'"' print "%1!",@s print "go" print "if @@error<>0" print " print 'create index %3! (%1!.%2!) failed [%4!]'", @user_name,@tbl_name,@index_name,@i print "else" print " print 'Ok'" print "go" print "" end close ccur go deallocate cursor ccur go ---------------------------------------------------------- print "print '----------------- triggers -----------------------------'" print "" go declare ccur cursor for select o.name,user_name(o.uid),o.crdate from sysobjects o ,#t t where o.type='tr' --and o.uid=user_id('dbo') and o.deltrig=object_id(t.param) order by object_name(object_id(t.param)),o.name go declare @i int,@j int, @name varchar(32), @user_name varchar(32), @s varchar(255), @sprev varchar(255), @ss varchar(255),@vb varbinary(255), @colid int, @crdate datetime select @i=0 open ccur while (1=1) begin fetch ccur into @name,@user_name,@crdate if @@sqlstatus<>0 break select @i=@i+1 print "print '%1!.%2! [%3!]'",@user_name,@name,@i print "print 'created %1! [on srv: %2!]'",@crdate,@@servername print "if exists (select * from sysobjects where " print " name='%1!' and uid=user_id('%2!') ",@name,@user_name print " and type='TR' ) begin " print " drop trigger %2!.%1! ",@name,@user_name print " if @@error=0" print " print 'dropped prev version Ok'" print " else" print " print 'drop trigger %2!.%1! Failed !!! [%3!]'",@name,@user_name,@i print "end" print "go" select @colid=0,@sprev=null while(1=1) begin select @s=text,@colid=colid from syscomments where id=object_id(@user_name+'.'+@name) and colid=(@colid+1) if @@rowcount=0 begin if (@sprev is not null) and (convert(varbinary(255),@sprev)<>0x00) begin print "%1!",@sprev -- select @vb=convert(varbinary(255),@sprev) -- print "%1!",@vb select @sprev=null end break end while(1=1) begin select @j=charindex(char(10),@s) if @j=0 begin select @j=char_length(@s) if (@j>0) and (substring(@s,@j,1)=char(13)) select @s=substring(@s,1,@j-1) if @sprev is not null select @sprev=@sprev+@s else select @sprev=@s break end select @ss=substring(@s,1,@j-1) select @s=substring(@s,@j+1,255) if ((@j-1)>0) and ( substring(@ss,@j-1,1)=char(13)) select @ss=substring(@ss,1,@j-2) -- if substring(@s,1,1)=char(10) select @s=substring(@s,2,254) if @sprev is not null begin select @ss=@sprev+@ss select @sprev=null end if (@ss is null) or (@ss="") print "" else begin print "%1!",@ss -- select @vb=convert(varbinary(255),@ss) -- print "%1!",@vb end end end print "go" print "" print "if @@error=0 " print " print 'Ok' " print "else" print " print 'createtion trigger %1!.%2! Failed !!! [%3!]'",@user_name,@name,@i print "go" print "" end close ccur go deallocate cursor ccur go print "print '----------------- grants -----------------------------'" print "" go declare ccur cursor for select (user_name(o.uid)+'.'+o.name) as tbl_name, u.name as to_name, v.name as what from sysprotects p,sysobjects o ,sysusers u , master..spt_values v,#t t where p.id=o.id and (o.type='u' ) and u.uid=p.uid and p.action=v.number and v.type='t' and o.name=t.param order by user_name(o.uid),o.name,u.name go set nocount on go declare @obj_name varchar(96), @usr_name varchar(32), @action varchar(30), @i int select @i=0 open ccur while(1=1) begin fetch ccur into @obj_name,@usr_name,@action if @@sqlstatus<>0 break select @i=@i+1 print "Grant %1! on %2! to %3!",@action ,@obj_name,@usr_name print "if (@@error=0)" print " print '[%1!] grant %2! on %3! to %4! succeeded.' ", @i,@action ,@obj_name,@usr_name print "else " print " print '[%1!] grant %2! on %3! to %4! FAILED!' ", @i,@action ,@obj_name,@usr_name print "go" print "" end close ccur go deallocate cursor ccur go ---------- окончание скрипта формирования скрипта таблицы --------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 10:11 |
|
||
|
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 10:27 |
|
||
|
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
|
|||
|---|---|---|---|
|
#18+
А от 12.5.3. ddlgen не пробовали ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 10:39 |
|
||
|
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
|
|||
|---|---|---|---|
|
#18+
MasterZivА от 12.5.3. ddlgen не пробовали ? А где его можно взять для юниксовой версии ? Клиент то все равно стоит от 12.5.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 15:10 |
|
||
|
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
|
|||
|---|---|---|---|
|
#18+
sn1251 dbschema.pl Мне бы именно инфу откуда можно из системных таблиц вытянуть аналогично тому как я по обычным таблицам написал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 15:14 |
|
||
|
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
|
|||
|---|---|---|---|
|
#18+
EBгEHИЙ MasterZivА от 12.5.3. ddlgen не пробовали ? А где его можно взять для юниксовой версии ? Клиент то все равно стоит от 12.5.0 В дистрибутиве сервера или EBF-а должен быть. Это не клиент, а утилита сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 17:57 |
|
||
|
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
|
|||
|---|---|---|---|
|
#18+
set nocount on go print "set nocount on" print "go" print "" go print "declare @s varchar(32)" print "select @s=@@servername" print "print 'current server=%%1!',@s" print "select @s=db_name()" print "print 'current db=%%1!',@s" print "print ''" print "go" print "" go declare @s varchar(32) select @s=db_name() print "print '-------------------------------------'" print "print 'from server.db=%1!.%2!'",@@servername,@s print "print '-------------------------------------'" print "go" print "" go create table #t( param varchar(32) not null ) go /*----------------------- from here -------------------------------*/ insert into #t(param) values (" имя прокси ") /*--------------------------------------------------------------*/ go declare ccur cursor for select o.name as tbl_name, user_name(o.uid) as user_name,a.char_value,a.object_info2,o.sysstat2,o.crdate from sysobjects o,#t t, sysattributes a where o.type="U" and o.name=t.param and a.object_cinfo=o.name and a.object_type='OD' order by user_name(o.uid),o.name go declare @full_name varchar(64) go declare @i int, @user_name varchar(32), @tbl_name varchar(32), @idcol int, @status int, @length int, @col_name varchar(32), @scale int, @usertype int, @type_name varchar(32), @prec int, @s varchar(255), @sysstat2 int, @extstatus int, @place varchar(255), @cdefault int, @s_def varchar(255), @crdate datetime, @dbname varchar(32) select @i=0 open ccur while(1=1) begin fetch ccur into @tbl_name,@user_name,@place,@extstatus,@sysstat2,@crdate if @@sqlstatus<>0 break select @i=@i+1,@dbname=db_name() print "print '%1!.%2! [%3!] created at %4! on srv %5!.%6!' ", @user_name,@tbl_name,@i,@crdate,@@servername,@dbname print "if exists( select * from sysobjects o " print " where o.name='%1!' ",@tbl_name print " and o.uid=user_id('%1!') ",@user_name print " and o.type='U' ) begin" print " print '!!! Warning !!! table %1!.%2! already exists'",@user_name,@tbl_name print " /* drop table %1!.%2! */ ",@user_name,@tbl_name print "end" print "else begin" print " CREATE EXISTING TABLE %1!.%2! (",@user_name,@tbl_name select @idcol=0 while(1=1) begin select @idcol=c.colid,@status=c.status,@length=c.length, @col_name=c.name,@prec=c.prec,@scale=c.scale, @usertype=c.usertype ,@type_name=t.name ,@cdefault=c.cdefault from syscolumns c,systypes t where c.id=object_id(@user_name+'.'+@tbl_name) and c.usertype=t.usertype and c.colid=@idcol+1 if @@rowcount<1 break if @idcol=1 select @s=" "+convert(char(30),@col_name) else select @s=" , "+convert(char(30),@col_name) if @type_name='numericn' select @type_name='numeric' select @s=@s+" "+convert(char(30),@type_name) if (@prec is not null) select @s=@s+convert(char(9),' ('+convert(varchar(3),@prec)+','+convert(varchar(3),@scale)+')') else if @usertype in (1,2,3,4,10,24,25,26,27,28) select @s=@s+convert(char(9),' ('+convert(varchar(3),@length)+')') else select @s=@s+replicate(" ",9) if (@cdefault is not null) and (@cdefault<>0) begin select @s_def=ltrim(rtrim(text)) from syscomments where id=@cdefault if @@rowcount>0 select @s=@s+' '+@s_def+' ' end if (@status & 128)=128 select @s=@s+" identity " if (@status & 8)=8 select @s=@s+" null" else select @s=@s+" not null" print "%1!",@s end print " )" if @sysstat2&8192=8192 print "lock allpages" if @sysstat2&16384=16384 print "lock datapages" if @sysstat2&32768=32768 print "lock datarows" select @s=null select @s=s.name from sysindexes i,syssegments s where i.id=object_id(@user_name+'.'+@tbl_name) and i.indid>0 and i.indid<255 and (i.status &16)=16 and i.segment=s.segment if @@rowcount=0 select @s=s.name from sysindexes i,syssegments s where i.id=object_id(@user_name+'.'+@tbl_name) and i.indid=0 and i.segment=s.segment print " on '%1!'",@s if @extstatus=1 print "external table" else print "external procedure" print "at '%1!'",@place print "end" print "go" print "if (@@error=0)" print " print 'Ok'" print "else " print " print 'create table %1!.%2! Failed !!! [%3!]' ",@user_name,@tbl_name,@i print "go" print "" end close ccur go deallocate cursor ccur go print "print '----------------- grants -----------------------------'" print "" go declare ccur cursor for select (user_name(o.uid)+'.'+o.name) as tbl_name, u.name as to_name, v.name as what from sysprotects p,sysobjects o ,sysusers u , master..spt_values v,#t t where p.id=o.id and (o.type='u' ) and u.uid=p.uid and p.action=v.number and v.type='t' and o.name=t.param order by user_name(o.uid),o.name,u.name go set nocount on go declare @obj_name varchar(96), @usr_name varchar(32), @action varchar(30), @i int select @i=0 open ccur while(1=1) begin fetch ccur into @obj_name,@usr_name,@action if @@sqlstatus<>0 break select @i=@i+1 print "Grant %1! on %2! to %3!",@action ,@obj_name,@usr_name print "if (@@error=0)" print " print '[%1!] grant %2! on %3! to %4! succeeded.' ", @i,@action ,@obj_name,@usr_name print "else " print " print '[%1!] grant %2! on %3! to %4! FAILED!' ", @i,@action ,@obj_name,@usr_name print "go" print "" end close ccur go deallocate cursor ccur go ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2006, 13:17 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=33541110&tid=2012997]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 395ms |

| 0 / 0 |
