How to alter table?
7 отговора
293 прегледа
How to alter table?
Ima li nachin da se dobavi foreign key, primary key na veche suzdadena
tablica? Ili da se iztrie foreign key?
tablica? Ili da se iztrie foreign key?
Re: How to alter table?
има ;-)
p.s. задавай по-конкретни въпроси за да получиш по-конкретни отговори - например за каква база става дума
p.s. задавай по-конкретни въпроси за да получиш по-конкретни отговори - например за каква база става дума
Re: How to alter table?
bazata e interbase.
interesuva me konkretno SQL kostrukciata, s koiato tova moze
da stane. i kak se trie foreign key. neshto kato: drop foreign key
interesuva me konkretno SQL kostrukciata, s koiato tova moze
da stane. i kak se trie foreign key. neshto kato: drop foreign key
Re: How to alter table?
Ако пише и на български вместо на маймунски
, вероятността да получи отговор се повишава

Re: find foreign key
USE ImotiMain
DECLARE @name nvarchar(200)
DECLARE CUR CURSOR FOR
SELECT name FROM sysobjects WHERE id in (SELECT constid FROM sysforeignkeys WHERE
rkeyid in (SELECT id FROM sysobjects WHERE name in ('tblOffers')) )
OPEN CUR
FETCH NEXT FROM CUR
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
declare @tname nvarchar(100)
set @tname = (SELECT name FROM sysobjects WHERE id = (SELECT fkeyid FROM sysforeignkeys WHERE constid = (SELECT id FROM sysobjects WHERE name = @name)))
declare @alter nvarchar(200)
SET @alter = 'alter table ' + @tname + ' drop constraint ' + @name
EXEC sp_executesql @alter
FETCH NEXT FROM CUR INTO @name
END
CLOSE CUR
DEALLOCATE CUR
DECLARE @name nvarchar(200)
DECLARE CUR CURSOR FOR
SELECT name FROM sysobjects WHERE id in (SELECT constid FROM sysforeignkeys WHERE
rkeyid in (SELECT id FROM sysobjects WHERE name in ('tblOffers')) )
OPEN CUR
FETCH NEXT FROM CUR
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
declare @tname nvarchar(100)
set @tname = (SELECT name FROM sysobjects WHERE id = (SELECT fkeyid FROM sysforeignkeys WHERE constid = (SELECT id FROM sysobjects WHERE name = @name)))
declare @alter nvarchar(200)
SET @alter = 'alter table ' + @tname + ' drop constraint ' + @name
EXEC sp_executesql @alter
FETCH NEXT FROM CUR INTO @name
END
CLOSE CUR
DEALLOCATE CUR
открих начина
Тази SQL конструкция за Interbase става ли?
Беше ми трудно да разбера какво прави.
Намерих следния начин да открия дали в дадена Interbase таблица
има foreign key:
SELECT * FROM RDB$DEPENDENCIES
WHERE (RDB$DEPENDED_ON_NAME='MEDNAP')and(RDB$FIELD_NAME='FIDAM')
Interbase си прави тези таблици с $, които са със служебна информация.
В тях може да се правят обикновени селекти и да се разбере всичко за структурата на таблица. И е много лесно; ако някой е закъсал като мен... :)
Беше ми трудно да разбера какво прави.
Намерих следния начин да открия дали в дадена Interbase таблица
има foreign key:
SELECT * FROM RDB$DEPENDENCIES
WHERE (RDB$DEPENDED_ON_NAME='MEDNAP')and(RDB$FIELD_NAME='FIDAM')
Interbase си прави тези таблици с $, които са със служебна информация.
В тях може да се правят обикновени селекти и да се разбере всичко за структурата на таблица. И е много лесно; ако някой е закъсал като мен... :)
Re: открих начина
Да, действително това е пътя за получаване на информация, но точно за foreign key тази заявка няма да ти свърши работа. По-добре пробвай следното:
За да получиш имената на всички foreign keys за дадена таблица 'MY_TABLE' :
select rdb$constraint_name from rdb$relation_constraints where rdb$relation_name='MY_TABLE' and rdb$constraint_type='FOREIGN KEY'
За да получиш описанието на всички foreign keys за дадена таблица 'MY_TABLE' :
select a.*
from rdb$ref_constraints a, rdb$relation_constraints b
where a.rdb$constraint_name=b.rdb$constraint_name
and b.rdb$relation_name='MY_TABLE' and b.rdb$constraint_type='FOREIGN KEY'
И така нататък в този дух.
PS
Сега погледнах, че ти всъщност питаш как да добавиш foreign key
Това не бива да го правиш директно със системните таблици. За това си има
ALTER TABLE табл ADD CONSTRAINT име_на_фор.кей FOREIGN KEY (по_поле) REFERENCES маст.табл. (поле);
За да получиш имената на всички foreign keys за дадена таблица 'MY_TABLE' :
select rdb$constraint_name from rdb$relation_constraints where rdb$relation_name='MY_TABLE' and rdb$constraint_type='FOREIGN KEY'
За да получиш описанието на всички foreign keys за дадена таблица 'MY_TABLE' :
select a.*
from rdb$ref_constraints a, rdb$relation_constraints b
where a.rdb$constraint_name=b.rdb$constraint_name
and b.rdb$relation_name='MY_TABLE' and b.rdb$constraint_type='FOREIGN KEY'
И така нататък в този дух.
PS
Сега погледнах, че ти всъщност питаш как да добавиш foreign key
Това не бива да го правиш директно със системните таблици. За това си има
ALTER TABLE табл ADD CONSTRAINT име_на_фор.кей FOREIGN KEY (по_поле) REFERENCES маст.табл. (поле);
Редактирано от NDeu на