如何在sql server 2008中获取没有约束的表列?

时间:2013-11-08 06:44:47

标签: sql-server-2008 tsql

我正在根据以下查询

创建与每个主表关联的历史记录表
SELECT TOP 0 * INTO HISTORY_TABLE FROM MASTER_TABLE

此查询创建一个名为HISTORY_TABLE的空表,其中包含类似于MASTER_TABLE中列的列,但具有应用于MASTER_TABLE的约束。

他们可以通过任何方式获得没有约束的列吗?

2 个答案:

答案 0 :(得分: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

我希望这会有所帮助。

答案 1 :(得分:0)

这会为您提供一组包含一组干净的表格。

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

但是他们很干净你需要定义PK,索引等等(但你可能需要在历史表上不同的那些......)