/ / SQL Server 2008で制約なしでテーブルの列を取得するには? - sql-server-2008、tsql

どのようにSQL Server 2008の制約なしでテーブルの列を取得するには? - sql-server-2008、tsql

次のクエリに基づいて各マスターテーブルに関連付けられた履歴テーブルを作成する

SELECT TOP 0 * INTO HISTORY_TABLE FROM MASTER_TABLE

このクエリは、という名前の空のテーブルを作成します。 HISTORY_TABLE の列に似た列で構成される MASTER_TABLE しかしに制約が適用される MASTER_TABLE.

制約なしで列を取得する方法はありますか。

回答:

回答№1は0

これは良い考えではないかもしれませんが、これはあなたが望むことをします..

//This creates the table with constraints
SELECT TOP 0 * INTO HISTORY_TABLE FROM MASTER_TABLE

//This will drop all the constraints
DECLARE @database NVARCHAR(50)
DECLARE @table NVARCHAR(50)
DECLARE @sql NVARCHAR(255)
SET @database = "databasename"
SET @table = "HISTORY_TABLE"
WHILE EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE constraint_catalog=@database AND table_name=@table)
BEGIN
SELECT @sql = "ALTER TABLE " + @table + " DROP CONSTRAINT " + CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE constraint_catalog=@database AND table_name=@table
EXEC sp_executesql @sql
END

私はこれが役立つことを願っています


回答№2の場合は0

これにより、きれいな列のセットを持つテーブルが得られます。

select top 0 * into #bounce from MASTER_TABLE
select * into HISTORY_TABLE from #bounce

しかし、それらはとてもきれいなので、PKやインデックスなどを定義する必要があります(とにかく、履歴テーブルでそれらを異なるものにする必要があるかもしれません...)