Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как правильно получить скрипты прокси таблиц на Sybase ASE ? / 7 сообщений из 7, страница 1 из 1
13.02.2006, 10:11
    #33540033
EBГEHИЙ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
Добрый день!

Подскажите пожалуйста как правильно решить такую проблему:
У нас раньше стоял 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

---------- окончание скрипта формирования скрипта таблицы ---------------------
...
Рейтинг: 0 / 0
13.02.2006, 10:27
    #33540063
sn1251
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
...
Рейтинг: 0 / 0
13.02.2006, 10:39
    #33540088
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
А от 12.5.3. ddlgen не пробовали ?
...
Рейтинг: 0 / 0
13.02.2006, 15:10
    #33541110
EBгEHИЙ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
MasterZivА от 12.5.3. ddlgen не пробовали ?

А где его можно взять для юниксовой версии ? Клиент то все равно стоит от 12.5.0
...
Рейтинг: 0 / 0
13.02.2006, 15:14
    #33541132
EBГEHИЙ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
sn1251 dbschema.pl


Мне бы именно инфу откуда можно из системных таблиц вытянуть аналогично тому как я по обычным таблицам написал
...
Рейтинг: 0 / 0
13.02.2006, 17:57
    #33541670
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
EBгEHИЙ MasterZivА от 12.5.3. ddlgen не пробовали ?

А где его можно взять для юниксовой версии ? Клиент то все равно стоит от 12.5.0

В дистрибутиве сервера или EBF-а должен быть. Это не клиент, а утилита сервера.
...
Рейтинг: 0 / 0
10.03.2006, 13:17
    #33592570
EBГЕНИЙ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно получить скрипты прокси таблиц на Sybase ASE ?
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
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как правильно получить скрипты прокси таблиц на Sybase ASE ? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]