我们的数据库在SQL Server 2012上运行。我想清空一些不需要的数据,而不仅仅是删除行。我无法使表中的所有列都为空,因为有些列已定义为“非空”。因此,我希望能找到一种方法来自动过滤它,或者根据它是否可为空或是否因某种原因而尝试/捕获,而不是通过名称手动指定允许空值的所有列。这样,我可以在任何给定的表上重用它。有什么想法吗?
我看到sys.columns
有一个is_nullable
和is_computed
列可供查询,我只是不知道如何在我的更新语句中将它们全部包装成“清空此表中允许空值的任何列”。
编辑:仅举例来说,我正在使用AdventureWorks2014
数据库进行测试。我可以运行以下查询来查看哪些列允许为空且不进行计算:
select name as 'column'
from sys.columns
where is_nullable = 1
and is_computed = 0
and object_id = OBJECT_ID('HumanResources.Employee')
此外,我可以运行以下查询以使我手动指定的某些列无效:
update [AdventureWorks2014].[HumanResources].[Employee]
set OrganizationNode = NULL
我只是不知道如何组合它们。
答案 0 :(得分:0)
值得尝试使用系统视图information_schema.columns。
select *
, 'update ' + TABLE_SCHEMA + '.' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = null'
from
INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE = 'YES'