別のテーブルから外部キーを削除したいので、自分の選択した値を挿入できます。SQL Serverで外部キー制約を削除するにはどうすればよいですか?
私はデータベースで新しくなっていますので、正しいSQLクエリを外して、外来キーの値を削除または削除してください。
別のテーブルから外部キーを削除したいので、自分の選択した値を挿入できます。SQL Serverで外部キー制約を削除するにはどうすればよいですか?
私はデータベースで新しくなっていますので、正しいSQLクエリを外して、外来キーの値を削除または削除してください。
てみ次
ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <FOREIGN_KEY_NAME>
私は制約名を追加しませんでした。その制約を削除するにはどうすればよいですか? –
制約名を指定しなくても、SQL Serverは一意の制約名を割り当てます。名前はSQL Management Studioで確認できます。 –
もちろん、postgresコマンドラインクライアントで\ d table_nameと入力して、制約の名前を見つけることもできます。通常は "fk ......."のように見える – Nytux
それが間違っていたのは、一度その壊れたそれは再びレコードを通過し、制約を破るものを削除することなく、再度オンにすることは容易ではないためです。
次のようにとにかく構文は次のとおりです。
いいえ、外部キーと主キーを削除するSQL Serverの構文は同じです。alter table
ALTER TABLE table
DROP FOREIGN KEY fk_key
EDIT:あなたはUSIた気付かなかった
ALTER TABLE Tablename DROP CONSTRAINT ContName;
は、MSDNを参照してください。 NGのSQLサーバー、私の悪い
ALTER TABLE table
DROP CONSTRAINT fk_key
SQL Serverを使用しています。 –
だから気づいた:) – mokuril
ALTER TABLE [TableName] DROP CONSTRAINT [CONSTRAINT_NAME]
しかし、あなたがそれを行うと、あなたが戻ってチャンスを得ることはありませんが、あなたは我々が外部キーを必要とする理由いくつかの基本的なデータベース帳が表示さ読むべき、慎重に男になります
参照整合性がまだ存在する限り、彼はそれを元に戻すことを望むならば、再び制約を追加することができる。とにかくそれは固定されなければならない。 – Tobberoth
@Tobberoth、はい、それは私が意味したこと、それを明確にしてくれてありがとう。現実世界では、ほとんどの場合、他の開発者がテーブル内のデータを混乱させ、それらのデータのために制約を戻すことができません。 –
は削除するには、すべてのDBからの制約:
SELECT 'ALTER TABLE ' + Table_Name +' DROP CONSTRAINT ' + Constraint_Name
FROM Information_Schema.CONSTRAINT_TABLE_USAGE
はすべてFKSを見つけるために、これらのクエリを使用します。
Declare @SchemaName VarChar(200) = 'Schema Name'
Declare @TableName VarChar(200) = 'Table name'
-- Find FK in This table.
SELECT
'IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N''' +
'[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' + FK.name + ']'
+ ''') AND parent_object_id = OBJECT_ID(N''' +
'[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].['
+ OBJECT_NAME(FK.parent_object_id) + ']' + ''')) ' +
'ALTER TABLE ' + OBJECT_SCHEMA_NAME(FK.parent_object_id) +
'.[' + OBJECT_NAME(FK.parent_object_id) +
'] DROP CONSTRAINT ' + FK.name
, S.name , O.name, OBJECT_NAME(FK.parent_object_id)
FROM sys.foreign_keys AS FK
INNER JOIN Sys.objects As O
ON (O.object_id = FK.parent_object_id)
INNER JOIN SYS.schemas AS S
ON (O.schema_id = S.schema_id)
WHERE
O.name = @TableName
And S.name = @SchemaName
-- Find the FKs in the tables in which this table is used
SELECT
' IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N''' +
'[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' + FK.name + ']'
+ ''') AND parent_object_id = OBJECT_ID(N''' +
'[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].['
+ OBJECT_NAME(FK.parent_object_id) + ']' + ''')) ' +
' ALTER TABLE ' + OBJECT_SCHEMA_NAME(FK.parent_object_id) +
'.[' + OBJECT_NAME(FK.parent_object_id) +
'] DROP CONSTRAINT ' + FK.name
, S.name , O.name, OBJECT_NAME(FK.parent_object_id)
FROM sys.foreign_keys AS FK
INNER JOIN Sys.objects As O
ON (O.object_id = FK.referenced_object_id)
INNER JOIN SYS.schemas AS S
ON (O.schema_id = S.schema_id)
WHERE
O.name = @TableName
And S.name = @SchemaName
あなたはそれを完全に削除する前に制約を無効にする(一時的に)検討すべきです。制約に違反する値の束を更新/ [挿入...あなたは
ALTER TABLE [dbo].[dbAccounting] NOCHECK CONSTRAINT [FK_some_FK_constraint]
を実行することができます
ALTER TABLE [dbo].[dbAccounting] CHECK CONSTRAINT [FK_some_FK_constraint]
:あなたがテーブル作成TSQLを見れば
次のようなものが表示されます元のCHECK
ステートメントを実行して元の状態に戻します。
(私は過去に継承されてきたクリーンアップ設計が不十分なシステムにこれを実行しなければならなかった。)
alter table <referenced_table_name> drop primary key;
外部キー制約が削除されます。
参照されているテーブルの主キーを削除することは、おそらく問題を解決する最悪の方法です。ああ待って - 参照されているテーブル自体を削除することが悪い可能性があります。 – brewmanz
また、SQL Server Management Studio自体から外部キー制約を削除することもできます。 コマンドが機能しない場合は試してみてください。
私はそれはあなたが構文または他があります使用しているDBによって
に役立ちます願っています。
あなたがのOracleを使用している場合あなたは他のユーザーがあなたに言ったものを配置する必要があります:
ALTER TABLE table_name DROP CONSTRAINT fk_name;
しかし、あなたはMySQLのを使用する場合、これは代わりに、あなたが入力することができ、あなたの構文エラーを与えます:
ALTER TABLE table_name DROP INDEX fk_name;
テーブルのすべての外部キーをドロップ:
USE [Database_Name]
DECLARE @FOREIGN_KEY_NAME VARCHAR(100)
DECLARE FOREIGN_KEY_CURSOR CURSOR FOR
SELECT name FOREIGN_KEY_NAME FROM sys.foreign_keys WHERE parent_object_id = (SELECT object_id FROM sys.objects WHERE name = 'Table_Name' AND TYPE = 'U')
OPEN FOREIGN_KEY_CURSOR
----------------------------------------------------------
FETCH NEXT FROM FOREIGN_KEY_CURSOR INTO @FOREIGN_KEY_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @DROP_COMMAND NVARCHAR(150) = 'ALTER TABLE Table_Name DROP CONSTRAINT' + ' ' + @FOREIGN_KEY_NAME
EXECUTE Sp_executesql @DROP_COMMAND
FETCH NEXT FROM FOREIGN_KEY_CURSOR INTO @FOREIGN_KEY_NAME
END
-----------------------------------------------------------------------------------------------------------------
CLOSE FOREIGN_KEY_CURSOR
DEALLOCATE FOREIGN_KEY_CURSOR
データベースに慣れていない場合は、外部キー違反が発生したときに最初に反応して、「外部キーを削除します」と考えるべきではありません。 –
[SQL Serverで外部キーを削除するにはどうすればいいですか?](http://stackoverflow.com/questions/93264/how-do-i-drop-a-foreign-key-in-sql-server) – Liam