2013-11-08 2 views
5

я создаю таблицу истории, связанную с каждой главной таблицей на основе следующего запросаКак получить столбцы таблицы без ограничений в SQL Server 2008?

SELECT TOP 0 * INTO HISTORY_TABLE FROM MASTER_TABLE 

этот запрос создает пустую таблицу с именем HISTORY_TABLE, состоящей из колонн, подобных колонки в MASTER_TABLE, но с ограничением в том, что применяются к MASTER_TABLE.

так ли их любой способ получить столбцы без ограничений?

+0

Вы хотите выбрать все столбцы или столбцы без ограничений? –

+0

хотите выделить все столбцы без ограничений. – Rohaan

ответ

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 [email protected] AND [email protected]) 
BEGIN 
SELECT @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE [email protected] AND table_name[email protected] 
EXEC sp_executesql @sql 
END 

Я надеюсь, что это помогает.

+0

Я не хочу отбрасывать ограничения, применяемые к таблице истории после создания таблицы, вместо этого я хочу создать таблицу истории из главной таблицы без каких-либо ограничений. – Rohaan

+0

Попробуйте это, это не копирует ключи, индексы, по умолчанию, но принимает ненулевое ограничение .. Выберите TOP 0 * В HISTORY_TABLE Из MASTER_TABLE Где 1 = 2 –

0

Это дает вам таблицу с чистым набором столбцов.

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

Но они настолько чисты, вы должны будете определить PK, индексы и т.д. (но вам может понадобиться тем, чтобы отличаться от таблицы истории так или иначе ...)

Смежные вопросы