Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

da li neko ima vremena da mi proveri sql?

[es] :: MS SQL :: da li neko ima vremena da mi proveri sql?

[ Pregleda: 1784 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mayana
Zrenjanin

Član broj: 176040
Poruke: 82
77.46.229.*



Profil

icon da li neko ima vremena da mi proveri sql?04.03.2009. u 10:46 - pre 152 meseci
ima li neko vremena ko se razume da mi proveri da li ovo valja?

text zadatka:
There are 2 independent databases (D1, D2). Each database contains one stored procedure A, two views (B, C) and one table D. Objects from D1 are similar to the objects of D2 (the same objects with little differences). Please create (write DDL scripts) the pairs of these objects if:

* Stored Proc’s A use Tables D and Views C. These proc’s are different in a parameter set (parameters are used in the queries from D or C).
* Tables D are different in primary keys (column names and column types within the tables have to be equal). Table D from D2 has one additional character field.
* Views B use Tables D and Views C. These views are different in a column set
* Views C use Tables D. These views are different in WHERE clause

First part: write DDL for all the objects for database D1 (in proper order of creating), then for D2. There must be no any cross-database references (objects of D1 should not use objects of D2).


Second part: write all the DDL operations (full SQL statements are preferred, but if you cannot list full DDL operations because of time limitation – list just the operation name with the shortest description, see the example) in proper dependency order required for making database D2 to be equal with database D1 without the errors (all changes are made in the database D2). As result all D2 objects get altered.

You may use DROP, ALTER or CREATE statements where you want. Using of ALTER is preferred instead of object re-creation


MOJE RESENJE:

USE [D1]
GO

CREATE TABLE D
(
COL1 INT,
COL2 CHAR,
COL3 CHAR,
PRIMARY KEY (COL1)
)


CREATE VIEW C
(
COL1 INT,
COL2 CHAR
)
AS SELECT COL1, COL2
FROM D
WHERE COL1 > 1200

CREATE VIEW B
(
COL1 INT,
COL2 CHAR
)
AS SELECT C.COL1, D.COL2
FROM C INNER JOIN D ON C.COL1=D.COL1

CREATE PROCEDURE A
@COL1 INT,
@COL2 CHAR
AS
INSERT INTO D (COL1, COL2) VALUES (@COL1, @COL2)
WHERE @COL2=
(SELECT COL2 FROM C)


USE [D2]
GO

CREATE TABLE D
(
COL1 INT,
COL2 CHAR,
COL3 CHAR,
COL4 CHAR,
PRIMARY KEY (COL3)
)


CREATE VIEW C
(
COL1 INT,
COL2 CHAR
)
AS SELECT COL1, COL2
FROM D
WHERE COL1 < 100

CREATE VIEW B
(
COL1 INT,
COL3 CHAR
)
AS SELECT C.COL1, D.COL3
FROM C INNER JOIN D ON C.COL1=D.COL1

CREATE PROCEDURE A
@COL1 INT,
@COL3 CHAR
AS
INSERT INTO D (COL1, COL2) VALUES (@COL2, @COL3)
WHERE @COL3=
(SELECT COL2 FROM C)

______

USE [D2]
GO

ALTER TABLE D
DROP COLUMN COL4,
DROP CONSTRAINT PRIMARY KEY (COL3),
ADD CONSTRAINT PRIMARY KEY (COL1)

ALTER VIEW C
(
COL1 INT,
COL2 CHAR
)
AS SELECT COL1, COL2
FROM D
WHERE COL1 > 1200

ALTER VIEW B
(
COL1 INT,
COL2 CHAR
)
AS SELECT C.COL1, D.COL2
FROM C INNER JOIN D ON C.COL1=D.COL1

ALTER PROCEDURE A
@COL1 INT,
@COL2 CHAR
AS
INSERT INTO D (COL1, COL2) VALUES (@COL1, @COL2)
WHERE @COL2=
(SELECT COL2 FROM C)







hvala unapred!!!
... ovde ima nesto sto se nikako ne slaze... ;)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6021



+4620 Profil

icon Re: da li neko ima vremena da mi proveri sql?04.03.2009. u 15:23 - pre 152 meseci
Ok, da krenemo redom:


1. Kad pravis DDL skripte razdvoji pojedinacne "kreacije" sa GO instrukcijom, vecina DDL CREATE/ALTER instrukcija ne moze da bude u istom batchu sa ostalim.
2. View D1.dbo.C ne valja. View ne moze imati parametre (inace je stored procedura ili table funkcija), mada ja mislim da ti uopste nisi htela da stavis parametre nego polja koja se vracaju, ne? TO se ne spominje, sema view-a se automatski izvlaci iz select-a, dakle:

Code:

CREATE VIEW C
AS SELECT COL1, COL2 
FROM D
WHERE COL1 > 1200
go


3. isto vazi za D1.dbo.B, D2.dbo.C i D2.dbo.B view-e
4. procedura D1.dbo.A ne valja, za pocetak ne postoji INSERT/WHERE konstrukcija pa mi nije najjasnije sta ta procedura treba da uradi? isto za D2.dbo.A
5. alter table ti ne valja:

a) alter column, drop i add ne mogu da se mesaju u jednoj alter table komandi. I kad pocnes jedan on vazi non stop
b) da bi sklonila stari primarni kljuc on mora da ima svoje ime kao constraint sto ti nisi uradila u create table pa je isti dobio neko autogenerisano ime (npr PK__D__AA1D00407F60ED59) i moras da znas to ime da bi ga koristila u DROP CONSTRAINT
Znaci npr:

Code:
ALTER TABLE D
DROP COLUMN COL4, CONSTRAINT PK__D__AA1D00407F60ED59;

i tek sad mozes da kreiras novi PK, zato bolje odmah imenuj primary key u create table.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mayana
Zrenjanin

Član broj: 176040
Poruke: 82
77.46.229.*



Profil

icon Re: da li neko ima vremena da mi proveri sql?05.03.2009. u 06:45 - pre 152 meseci
1.hmm..... na jednom sajtu sam nasla sintaksu za view ovako
Code:
 
CREATE VIEW V_TOP_CUSTOMER (
customer_id,
customer_name,
ytd_sales_amt,
zip_code)
AS SELECT customer_id,
customer_name,
ytd_sales_amt,
zip_code
FROM CUSTOMER
WHERE ytd_sales_amt > 1200.00
 

pa sam odatle uzela, ako oni lazu lazem ja ;) mozda sajt nije radjen bas za ms sql.

2. za proceduru,moze ovako?
Code:
 CREATE PROCEDURE A
@COL1 INT,
@COL3 CHAR
AS
 INSERT  INTO D (COL1, COL2) VALUES (@COL2, @COL3)
go
  


3. kako se stavlja ime constraintu? da li ovako???

Code:

CREATE TABLE D
(
COL1 INT,
COL2 CHAR,
COL3 CHAR,
)
go 


ALTER TABLE D 
ADD CONSTRAINT pk PRIMARY KEY (col1)
go



HVALA NA DOSADASNJEM ODGOVORU I HVALA UNAPRED NA SLEDECEM!!!


... ovde ima nesto sto se nikako ne slaze... ;)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6021



+4620 Profil

icon Re: da li neko ima vremena da mi proveri sql?05.03.2009. u 08:25 - pre 152 meseci
1. Ovaj oblik CREATE VIEW je u sql standardu i za sintaksu SQL servera najbolje da se fokusiras na MSDN SQL Books Online, a iste informacije imas i u Offline help-u koji dolazi uz SQL server, sajtova ima raznih. U svakom slucaju napominjanje polja u create view je redundantno jer ce select odrediti semu, tako da i ja malo preterujem, MOZES da navedes imena i samo imena polja koja view vraca, ali NEMOJ jer samo prvise sebi posao sa odrzavanjem (promena selecta mora da vuce promenu liste kolona)

2. Ne moze Ne zato sto nije sintaksno ispravno vec zato sto ne zadovoljava uslove tvog zadatka:
Stored Proc’s A use Tables D and Views C. These proc’s are different in a parameter set (parameters are used in the queries from D or C).

Nigde ne pise da mora da bude insert. Uradi select neki sa inner join izmedju D i C i vrati po jedno polje iz oba i zadovoljices zadatak.

3. Moze i tako, ali CONSTRAINT mozes da ubacis i direktno u CREATE TABLE. Ako ti je primarni kljuc ne-kompozitni (nije iz vise polja) onda mozes direktno da nakacis contraint na polje:

Code:
CREATE TABLE D (
COL1 INT CONSTRAINT pk PRIMARY KEY,
COL2 CHAR,
COL3 CHAR,
)
go


a ako je kompozitni (iz vise polja), onda constraint navedes na nivou tabele:

Code:
CREATE TABLE D (
COL1 INT,
COL2 CHAR,
COL3 CHAR,
CONSTRAINT pk PRIMARY KEY (COL1, COL2)
)
go


Obrati samo paznju da su imena svih objekata u sta spadaju i constraints unique na nivou baze. Znaci npr ne mozes imati u istoj bazi dve tabele sa primarnim kljucem koji se zove pk, pa gledaj da razvijes praksu da support objekte (constraints, indexes, FKs, itd) imenujes koristeci ime objekta koji opsluzuju. Npr ovde bi PK mogla da nazoves D_pk (tabela D, primarni kljuc). Ovo naravno je samo preporuka, mozes ti slobodno da razvijes i neki svoj naming mehanizam, SQL servera ne zanima to mnogo dok god se imena razlikuju

Ajd sad okaci ponovo ceo skript posle ovih izmena da vidimo dal ti je dobar second part (svodjenje D2 na D1).
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mayana
Zrenjanin

Član broj: 176040
Poruke: 82
77.46.229.*



Profil

icon Re: da li neko ima vremena da mi proveri sql?05.03.2009. u 09:13 - pre 152 meseci
evo

Code:

use [D1]
go

create table D 
(
col1 int constraint D1_pk PRIMARY KEY,
col2 char,
col3 char
)
go
  
create view c
as
 select col1, col2
from d
where col1 > 1200
go

CREATE VIEW B
AS
 SELECT C.COL1, D.COL2
FROM C INNER JOIN D ON C.COL1=D.COL1
go

CREATE PROCEDURE A
@COL1 INT,
@COL2 CHAR
AS
  SELECT D.COL1, C.COL2 FROM D INNER JOIN C ON D.COL2=C.COL2
GO
  


USE [D2]
GO

CREATE TABLE D
(
  COL1 INT,
  COL2 CHAR,
  COL3 CHAR CONSTRAINT D2_pk PRIMARY KEY,
  COL4 CHAR,
)
GO
  
CREATE VIEW C
AS 
SELECT COL1, COL2 
FROM D
WHERE COL1 < 100
GO

CREATE VIEW B
AS 
SELECT C.COL1, D.COL3
FROM C INNER JOIN D ON C.COL1=D.COL1
GO

CREATE PROCEDURE A
@COL1 INT,
@COL3 CHAR
AS
 SELECT D.COL1, C.COL3 FROM D INNER JOIN C ON D.COL3=C.COL3
GO
  

______

USE [D2]
GO

ALTER TABLE D
DROP COLUMN COL4, CONSTRAINT D2_pk
GO

ALTER TABLE D
ADD CONSTRAINT D2_pk1 PRIMARY KEY (col1)
GO

ALTER VIEW C
 AS 
SELECT COL1, COL2 
FROM D
WHERE COL1 > 1200
GO

ALTER VIEW B
AS 
SELECT C.COL1, D.COL2
FROM C INNER JOIN D ON C.COL1=D.COL1
GO

ALTER PROCEDURE A
@COL1 INT,
@COL2 CHAR
AS
  SELECT D.COL1, C.COL2 FROM D INNER JOIN C ON D.COL2=C.COL2
GO



hvala!









... ovde ima nesto sto se nikako ne slaze... ;)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6021



+4620 Profil

icon Re: da li neko ima vremena da mi proveri sql?05.03.2009. u 10:52 - pre 152 meseci
OK,

1. procedura D1.dbo.A, ne mozes a koristis kolonu C.COL3 jer view C ne vraca COL3. Uzmi COL2, a u drugoj A proceduri izmu neko drugo polje iz D

2. ne mozes da dodas PK na col1 sa alter jer je col1 null polje.
Probaj ovo:

Code:
ALTER TABLE D DROP COLUMN COL4, CONSTRAINT D2_pk
GO
ALTER TABLE D alter column col1 int not null
go
ALTER TABLE D alter column col3 char null
GO
ALTER TABLE D ADD CONSTRAINT D2_pk1 PRIMARY KEY (col1)
go


ili jos bolje u startu u svim create table stavi da su ti polja NOT NULL, da sebi olaksas jer je cilj da ti na kraju seme budu iste pa neces morati da menjas NULLovanja vec samo da prebacis constraint na drugo polje.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mayana
Zrenjanin

Član broj: 176040
Poruke: 82
77.46.229.*



Profil

icon Re: da li neko ima vremena da mi proveri sql?05.03.2009. u 11:10 - pre 152 meseci
1. da da nisam obracala paznju, zurila sam... hvala!
2. pametno, svuda staviti not null, u tom slucaju, ako je to svuda vec stavljeno, moze onako kako sam napisala, jel?
hvala
... ovde ima nesto sto se nikako ne slaze... ;)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6021



+4620 Profil

icon Re: da li neko ima vremena da mi proveri sql?05.03.2009. u 11:31 - pre 152 meseci
Da, ako stavis svuda not null, onda ti ne trebaju te dve alter column komande i mozes da zadrzis svoje dve.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mayana
Zrenjanin

Član broj: 176040
Poruke: 82
77.46.229.*



Profil

icon Re: da li neko ima vremena da mi proveri sql?05.03.2009. u 11:49 - pre 152 meseci
jeeee!!! onda sam mnogo naucila sada! hvala puno!!!!
... ovde ima nesto sto se nikako ne slaze... ;)
 
Odgovor na temu

[es] :: MS SQL :: da li neko ima vremena da mi proveri sql?

[ Pregleda: 1784 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.