ďťż
 
migracja skryptu SQL z Interbase do MSSQL 2005 Exp. ďťż
 
migracja skryptu SQL z Interbase do MSSQL 2005 Exp.
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

migracja skryptu SQL z Interbase do MSSQL 2005 Exp.



Sowiecki Agent - 30-03-2007 00:07
migracja skryptu SQL z Interbase do MSSQL 2005 Exp.
  Witam!
Mam prosbe do bieglych w mssql, musze wyexportowac metadane sporej bazy
z interbase do MSSQL. Przygotowalem fikcyjne 3 tabele, procedury(no
procz jednej), generatory i wyzwalacze, czy ktos bylby tak mily i
zamienil ten kod na sql zgody z MSSQL ? Wiedzialbym wtedy co i jak
zamieniac.

wklejam
+++++++++++++++++++++++++++

/************************************************** ****************************/
/**** Generated by IBExpert 2006.10.14 2007-03-29 14:52:10
****/
/************************************************** ****************************/

SET SQL DIALECT 3;

SET NAMES WIN1250;

/************************************************** ****************************/
/**** Generators
****/
/************************************************** ****************************/

CREATE GENERATOR GEN_TABLICA_PIERWSZA_ID;
SET GENERATOR GEN_TABLICA_PIERWSZA_ID TO 0;

CREATE GENERATOR GEN_TAB_NAGL_ID;
SET GENERATOR GEN_TAB_NAGL_ID TO 0;

CREATE GENERATOR GEN_TAB_SZCZ_ID;
SET GENERATOR GEN_TAB_SZCZ_ID TO 0;

SET TERM ^ ;

/************************************************** ****************************/
/**** Stored Procedures
****/
/************************************************** ****************************/

CREATE PROCEDURE NOWY_ID_TAB
RETURNS (
V_ID_TAB INTEGER)
AS
BEGIN
EXIT;
END^

CREATE PROCEDURE NOWY_NUMER_DLA_TAB (
V_ID_TAB INTEGER,
V_SERIA VARCHAR(10))
RETURNS (
V_NUMER_TAB VARCHAR(50))
AS
BEGIN
EXIT;
END^

SET TERM ; ^

/************************************************** ****************************/
/**** Tables
****/
/************************************************** ****************************/

CREATE TABLE TAB_NAGL (
ID_TAB_NAGL INTEGER NOT NULL,
JAKIES_DANE VARCHAR(10),
SERIA VARCHAR(10),
NUMER INTEGER,
DOPISEK VARCHAR(30)
);

CREATE TABLE TAB_SZCZ (
ID_TAB_SZCZ INTEGER NOT NULL,
ID_TAB_NAGL INTEGER NOT NULL,
KWOTA NUMERIC(15,2)
);

CREATE TABLE TABLICA_PIERWSZA (
ID_TABLICA_PIERWSZA INTEGER NOT NULL,
KWOTA NUMERIC(15,2),
NAZWA VARCHAR(10),
CZAS TIMESTAMP,
DATA DATE,
OPIS BLOB SUB_TYPE 1 SEGMENT SIZE 80
);

/************************************************** ****************************/
/**** Primary Keys
****/
/************************************************** ****************************/

ALTER TABLE TABLICA_PIERWSZA ADD CONSTRAINT PK_TABLICA_PIERWSZA PRIMARY
KEY (ID_TABLICA_PIERWSZA);
ALTER TABLE TAB_NAGL ADD CONSTRAINT PK_TAB_NAGL PRIMARY KEY (ID_TAB_NAGL);
ALTER TABLE TAB_SZCZ ADD CONSTRAINT PK_TAB_SZCZ PRIMARY KEY (ID_TAB_SZCZ);

/************************************************** ****************************/
/**** Foreign Keys
****/
/************************************************** ****************************/

ALTER TABLE TAB_SZCZ ADD CONSTRAINT FK_TAB_SZCZ_1 FOREIGN KEY
(ID_TAB_NAGL) REFERENCES TAB_NAGL (ID_TAB_NAGL);

/************************************************** ****************************/
/**** Triggers
****/
/************************************************** ****************************/

SET TERM ^ ;

/************************************************** ****************************/
/**** Triggers for tables
****/
/************************************************** ****************************/

/* Trigger: TAB_SZCZ_BI */
CREATE TRIGGER TAB_SZCZ_BI FOR TAB_SZCZ
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID_TAB_SZCZ IS NULL) THEN
NEW.ID_TAB_SZCZ = GEN_ID(GEN_TAB_SZCZ_ID,1);
END
^

SET TERM ; ^

/************************************************** ****************************/
/**** Stored Procedures
****/
/************************************************** ****************************/

SET TERM ^ ;

ALTER PROCEDURE NOWY_ID_TAB
RETURNS (
V_ID_TAB INTEGER)
AS
declare variable v_id integer;
begin
v_id = gen_id("GEN_TAB_NAGL_ID",1);

v_id_tab = v_id;

suspend;
end
^

ALTER PROCEDURE NOWY_NUMER_DLA_TAB (
V_ID_TAB INTEGER,
V_SERIA VARCHAR(10))
RETURNS (
V_NUMER_TAB VARCHAR(50))
AS
declare variable tmpdate date;
declare variable zmienna1 integer;
declare variable zmienna2 integer;
declare variable v_dopisek varchar(20);
declare variable v_numer integer;
begin
select cast('now' as date) from rdb$database
into tmpdate;
zmienna1=extract(month from tmpdate);
zmienna2=extract(year from tmpdate);
v_dopisek = (zmienna1||'/'||zmienna2);
SELECT coalesce(max(numer),0) FROM tab_nagl
WHERE seria = :v_seria and dopisek = :v_dopisek
INTO :v_numer;
v_numer = (v_numer + 1);

UPDATE tab_nagl SET
seria = :v_seria ,
numer = :v_numer ,
dopisek = :v_dopisek
WHERE id_tab_nagl = :v_id_tab;

v_numer_tab = (v_seria||'/'||v_numer||'/'||v_dopisek);
suspend;
end
^

SET TERM ; ^

+++++++++++++++++++++++++++

--
http://www.niesfornazyta.pl/
Pierwszy stacjonarny czytnik for typu phpBB/phpBBbyPrzemo (windows/linux)
Od dziś możesz korzystać z fora tak jak z usenetu !





wloochacz - 30-03-2007 00:07

  > Witam!
> Mam prosbe do bieglych w mssql, musze wyexportowac metadane sporej bazy
> z interbase do MSSQL. Przygotowalem fikcyjne 3 tabele, procedury(no
> procz jednej), generatory i wyzwalacze, czy ktos bylby tak mily i
> zamienil ten kod na sql zgody z MSSQL ? Wiedzialbym wtedy co i jak
> zamieniac.
Odpalić i działa :)
Uwaga:
Zmieniłem typ pól id z int na uniqueidentifier - w MSSQL nie ma
generatorów! Nie ma też triggerów Before - żenada :P
A na początku z polami typu identity będziesz miał problemy...

--
wlooochacz

-- SQL Manager 2005 for SQL Server (2.6.0.2)
-- ---------------------------------------
-- Host : 192.176.16.80\DEV2K
-- Database : Sowiecki
-- Version : Microsoft SQL Server 8.00.760

--
-- Dropping foreign key FK__TAB_SZCZ__ID_TAB__7B905C75 :
--

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id =
OBJECT_ID(N'[FK__TAB_SZCZ__ID_TAB__7B905C75]') AND OBJECTPROPERTY(id,
N'IsForeignKey') = 1)
ALTER TABLE [dbo].[TAB_SZCZ]
DROP CONSTRAINT [FK__TAB_SZCZ__ID_TAB__7B905C75]
GO

--
-- Dropping stored procedure NOWY_ID_TAB :
--

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id =
OBJECT_ID(N'[NOWY_ID_TAB]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[NOWY_ID_TAB]
GO

--
-- Dropping stored procedure NOWY_NUMER_DLA_TAB :
--

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id =
OBJECT_ID(N'[NOWY_NUMER_DLA_TAB]') AND OBJECTPROPERTY(id,
N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[NOWY_NUMER_DLA_TAB]
GO

--
-- Dropping table TAB_NAGL :
--

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id =
OBJECT_ID(N'[TAB_NAGL]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[TAB_NAGL]
GO

--
-- Dropping table TAB_SZCZ :
--

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id =
OBJECT_ID(N'[TAB_SZCZ]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[TAB_SZCZ]
GO

--
-- Dropping table TABLICA_PIERWSZA :
--

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id =
OBJECT_ID(N'[TABLICA_PIERWSZA]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[TABLICA_PIERWSZA]
GO

--
-- Definition for table TAB_NAGL :
--

CREATE TABLE [dbo].[TAB_NAGL] (
[ID_TAB_NAGL] uniqueidentifier NOT NULL,
[JAKIES_DANE] varchar(10) COLLATE Polish_CI_AS NULL,
[SERIA] varchar(10) COLLATE Polish_CI_AS NULL,
[NUMER] int NULL,
[DOPISEK] varchar(30) COLLATE Polish_CI_AS NULL
)
ON [PRIMARY]
GO

--
-- Definition for table TAB_SZCZ :
--

CREATE TABLE [dbo].[TAB_SZCZ] (
[ID_TAB_SZCZ] uniqueidentifier NOT NULL,
[ID_TAB_NAGL] uniqueidentifier NOT NULL,
[KWOTA] numeric(15, 2) NULL
)
ON [PRIMARY]
GO

--
-- Definition for table TABLICA_PIERWSZA :
--

CREATE TABLE [dbo].[TABLICA_PIERWSZA] (
[ID_TABLICA_PIERWSZA] uniqueidentifier NOT NULL,
[KWOTA] numeric(15, 2) NULL,
[NAZWA] varchar(10) COLLATE Polish_CI_AS NULL,
[CZAS] datetime NULL,
[DATA] datetime NULL,
[OPIS] text COLLATE Polish_CI_AS NULL
)
ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO

--
-- Definition for indices :
--

ALTER TABLE [dbo].[TAB_NAGL]
ADD PRIMARY KEY CLUSTERED ([ID_TAB_NAGL])
ON [PRIMARY]
GO

ALTER TABLE [dbo].[TAB_SZCZ]
ADD PRIMARY KEY CLUSTERED ([ID_TAB_SZCZ])
ON [PRIMARY]
GO

ALTER TABLE [dbo].[TABLICA_PIERWSZA]
ADD PRIMARY KEY CLUSTERED ([ID_TABLICA_PIERWSZA])
ON [PRIMARY]
GO

--
-- Definition for foreign keys :
--

ALTER TABLE [dbo].[TAB_SZCZ]
ADD FOREIGN KEY ([ID_TAB_NAGL])
REFERENCES [dbo].[TAB_NAGL] ([ID_TAB_NAGL])
ON UPDATE NO ACTION
ON DELETE NO ACTION
GO

--
-- Definition for stored procedure NOWY_ID_TAB :
--

CREATE PROCEDURE [dbo].NOWY_ID_TAB(@V_ID_TAB uniqueidentifier out)
AS
begin
set nocount on;

set @V_ID_TAB = newid();

set nocount off;
end
GO

--
-- Definition for stored procedure NOWY_NUMER_DLA_TAB :
--

CREATE PROCEDURE [dbo].NOWY_NUMER_DLA_TAB(@V_ID_TAB uniqueidentifier,
@V_SERIA varchar(10), @V_NUMER_TAB VARCHAR(50) out)
AS
begin
declare @tmpdate datetime;
declare @zmienna1 integer;
declare @zmienna2 integer;
declare @v_dopisek varchar(20);
declare @v_numer integer;

set nocount on;

set @tmpdate = getdate();
set @zmienna1 = datepart(mm, @tmpdate);
set @zmienna2 = datepart(y, @tmpdate);

set @v_dopisek = @zmienna1 + '/' + @zmienna2;

select @V_NUMER = coalesce(max(A.NUMER), 0)
from TAB_NAGL A
where A.SERIA = @V_SERIA and A.DOPISEK = @V_DOPISEK;

set @v_numer = @v_numer + 1;

update TAB_NAGL
set SERIA = @V_SERIA,
NUMER = @V_NUMER,
DOPISEK = @V_DOPISEK
where ID_TAB_NAGL = @V_ID_TAB;

set @v_numer_tab = @v_seria+'/'+@v_numer+'/'+@v_dopisek;

set nocount off;
end
GO




wloochacz - 30-03-2007 00:07

  [ciach]
Nie ma też triggerów Before - żenada :P
No tak - jest instead of, ale Firebirdowy Before jest duuużo bardziej
przyjemniejszy... ;-)

--
wloochacz




Sowiecki Agent - 30-03-2007 00:07

  wloochacz napisał(a):
> [ciach]
> Nie ma też triggerów Before - żenada :P
> No tak - jest instead of, ale Firebirdowy Before jest duuużo bardziej
> przyjemniejszy... ;-)
>

:)) ogromne dzieki, z samego rana zabieram sie za zmiane wszystkiego i
... dalej juz na lang.delphi bede trul :)

Pozdrawiam
P

ps.
jakie problemy z polami Identity?
Jak sie domyslam jest to ciag liter i cyfr ( ztego co pamietam), czy
jest zatem sposob na wygenerowanie samych cyfr, chodzi o to bym z
poziomu delphi widzial pole integer, po to azebym nie musial przy
zmainie silnika bazy danych zmieniac pol we wszystkich komponentach.

--
http://www.niesfornazyta.pl/
Pierwszy stacjonarny czytnik for typu phpBB/phpBBbyPrzemo (windows/linux)
Od dziś możesz korzystać z fora tak jak z usenetu !





wloochacz - 30-03-2007 00:07

  [ciach]
> ps.
> jakie problemy z polami Identity?
> Jak sie domyslam jest to ciag liter i cyfr ( ztego co pamietam), czy
Tym jest uniqueidentifier - to jest po prostu GUID, mapowany w FB jako
char(38)...

> jest zatem sposob na wygenerowanie samych cyfr, chodzi o to bym z
> poziomu delphi widzial pole integer, po to azebym nie musial przy
> zmainie silnika bazy danych zmieniac pol we wszystkich komponentach.
Przestań się domyślać i zacznij czytać dokumentację ;-)
Identity to jest pole typu całkowitego, którego wartość jest nadawana
przez serwer i jest ściśle związana z definicją pola w tabeli (zupełnie
inaczej niż generator w FB). Nie można wprost takiego pola modyfikować,
trzeba powiadomić MSSQL, że chcesz zmienić wartość w takim polu.
Skoro nie można dodawać, to nie można się dowiedzieć jaka jest wartość w
tym polu, co sprawia kłopot przy trybach CachedUpdates... Oczywiście
AnyDAC umie sobie z tym poradzić :)
Wybaczcie lekkie OT ;-)

--
wloochacz




Sowiecki Agent - 31-03-2007 00:06

 
>> jest zatem sposob na wygenerowanie samych cyfr, chodzi o to bym z
>> poziomu delphi widzial pole integer, po to azebym nie musial przy
>> zmainie silnika bazy danych zmieniac pol we wszystkich komponentach.
> Przestań się domyślać i zacznij czytać dokumentację ;-)
> Identity to jest pole typu całkowitego, którego wartość jest nadawana
> przez serwer i jest ściśle związana z definicją pola w tabeli (zupełnie
> inaczej niż generator w FB). Nie można wprost takiego pola modyfikować,
> trzeba powiadomić MSSQL, że chcesz zmienić wartość w takim polu.
> Skoro nie można dodawać, to nie można się dowiedzieć jaka jest wartość w
> tym polu, co sprawia kłopot przy trybach CachedUpdates... Oczywiście
> AnyDAC umie sobie z tym poradzić :)
> Wybaczcie lekkie OT ;-)
>

no wiec zostaje przy intach w polach ID zeby pozniej nie bylo problemu
przy przenoszeniu. Tylko mam pytanie, w jaki sposob uzyskac kolejny id
dla pola int z opcja identity z poziomu procedury , dla uniqueidentifier
jak pisales wystarczy wywolac:

set @V_ID_TAB = newid();

a ja tutaj chcialbym kolejny unikalny dla konkretnej tabeli. W jaki
sposob uzyskac i czy w momencie gdy go pobiore ja i 'ktos jeszcze' przy
czym ja nie zapisze w miedzyczaqsie rekordu to czy ten 'ktos jeszcze'
dostanie inna wartosc niz ja (czyli jak generator w Firebird).

(docelowo bede miec mase tabel i komponentow zmiana kluczowych pol nie
wchodzi w gre, musialbym przygotowac trzy rozne wersje. A chce by od
strony aplikacji (poza polaczeniem) nie mialo znaczenia z jakiej bazy
sie kporzysta, a co za tym idzie nie chce uzywac roznych typow pol
dlatego sie czepiam tego uni cos tam ifier).

P.

--
http://www.niesfornazyta.pl/
Pierwszy stacjonarny czytnik for typu phpBB/phpBBbyPrzemo (windows/linux)
Od dziś możesz korzystać z fora tak jak z usenetu !




Sowiecki Agent - 31-03-2007 00:06

  dobra nie bylo pytania, wlasnieprzejrzalem dokument migracji z MSSQL do
firebird i zalaplem o czym piszesz.

Po rpostu przy tworzeniu tabel w firebird jako pole id ustawie char(38)
i wykorzystam UDFa ktory pobierze mi w wyzwalaczu before insert
(odpowiednik instead of MSSQL) unikalny 'numer' na serwerze tym samym od
strony aplikacji nic sie nie zmieni.

tak czy siak dzieki :)

--
http://www.niesfornazyta.pl/
Pierwszy stacjonarny czytnik for typu phpBB/phpBBbyPrzemo (windows/linux)
Od dziś możesz korzystać z fora tak jak z usenetu !
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= =?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= =?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?= [Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?= =?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?= [newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?= ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?= [oracle] - Oracle SQL Developer - co to jest SID?
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wawa19wwa91.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com