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

Posted

技术标签:

【中文标题】如何在 sql server 2008 中获取没有约束的表列?【英文标题】:how to get table columns without constraints in sql server 2008? 【发布时间】:2013-11-20 02:41:19 【问题描述】:

我正在根据以下查询创建与每个主表关联的历史表

SELECT TOP 0 * INTO HISTORY_TABLE FROM MASTER_TABLE

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

那么他们有什么方法可以不受限制地获取列吗?

【问题讨论】:

你想选择所有的列或者没有约束的列?? 想要选择所有没有约束的列。 【参考方案1】:

这可能不是个好主意,但这可以满足您的需求..

//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

我希望这会有所帮助。

【讨论】:

我不想在创建表后删除应用在历史表上的约束,而是我想从没有任何约束的主表创建历史表.. 试试这个,这不会复制键、索引、默认约束,但不接受空约束.. Select TOP 0 * Into HISTORY_TABLE From MASTER_TABLE where 1 = 2【参考方案2】:

这将为您提供一个包含一组干净列的表格。

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

但它们非常干净,您需要定义 PK、索引等(但无论如何,您可能需要在历史记录表中将它们设为不同...)

【讨论】:

以上是关于如何在 sql server 2008 中获取没有约束的表列?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Sql Server 2008 获取用于插入到 select 中的 scope_identity 列表?

sql server 2008 一个数据库如何获取另一个数据库中的数据?

如何在 SQL Server 2005/2008 中清除查询执行统计信息

如何在 SQL Server 2008 中进行分页

如何查找 SQL Server 2008 实例,包括默认实例

我如何在 SQL SERVER 2008 中使用 Active Directory 用户进行身份验证但没有 Windows 身份验证