SQL Server:取消所有允许为空的列

时间:2018-11-13 19:32:39

标签: sql-server tsql nullable

我们的数据库在SQL Server 2012上运行。我想清空一些不需要的数据,而不仅仅是删除行。我无法使表中的所有列都为空,因为有些列已定义为“非空”。因此,我希望能找到一种方法来自动过滤它,或者根据它是否可为空或是否因某种原因而尝试/捕获,而不是通过名称手动指定允许空值的所有列。这样,我可以在任何给定的表上重用它。有什么想法吗?

我看到sys.columns有一个is_nullableis_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

我只是不知道如何组合它们。

1 个答案:

答案 0 :(得分:0)

值得尝试使用系统视图information_schema.columns。

select *
, 'update ' + TABLE_SCHEMA + '.' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = null'
from 
INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE = 'YES'