我有一个数据库,我有很多位类型的列。 添加其他列之后,我需要所有旧列都具有默认的“false”值。如何在MSSQL的所有数据库中将所有位类型列NULL值更改为false?
7
A
回答
18
更新每个老栏为0,您可以使用此查询(上一列逐列的基础上):
UPDATE MyTable
SET OldCol1 = 0
WHERE OldCol1 IS NULL
然后,如果你想要的任何未来值有默认值为0作为好了,用这个:现在
ALTER TABLE MyTable
ALTER COLUMN OldCol1 bit NOT NULL
ALTER TABLE MyTable
ADD CONSTRAINT OldCol1ShouldBeFalse DEFAULT 0 FOR OldCol1
,你必须对每一个旧列运行这个,所以希望你不要有太多。
3
如果您不想一个接一个地执行此操作,则嵌套的动态SQL将实现该作业。请注意,它不会首先进行任何检查以确认该列尚未具有默认约束(即使该列可为空也可能),但可以增强脚本以执行此操作(甚至可以删除这种情况下的约束是默认的1)。
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'DECLARE @sql NVARCHAR(MAX); SET @sql = N'''';';
SELECT @sql = @sql + N'
SELECT @sql = @sql + N''UPDATE ' + QUOTENAME(name)
+ '.'' + QUOTENAME(s.name) + ''.'' + QUOTENAME(t.name) + ''
SET '' + QUOTENAME(c.name) + '' = 0
WHERE '' + QUOTENAME(c.name) + '' IS NULL;
ALTER TABLE ' + QUOTENAME(name) + '.'' + QUOTENAME(s.name)
+ ''.'' + QUOTENAME(t.name)
+ '' ADD CONSTRAINT '' + c.name + ''_FalseByDefault
DEFAULT (0) FOR '' + QUOTENAME(c.name) + '';
ALTER TABLE ' + QUOTENAME(name) + '.'' + QUOTENAME(s.name)
+ ''.'' + QUOTENAME(t.name)
+ '' ALTER COLUMN '' + QUOTENAME(c.name) + '' BIT NOT NULL;
''
FROM ' + QUOTENAME(name) + '.sys.columns AS c
INNER JOIN ' + QUOTENAME(name) + '.sys.tables AS t
ON c.[object_id] = t.[object_id]
INNER JOIN ' + QUOTENAME(name) + '.sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE c.system_type_id = 104 AND c.is_nullable = 1
AND t.is_ms_shipped = 0;'
FROM sys.databases WHERE database_id > 4;
SET @sql = @sql + 'PRINT @sql;
--EXEC sp_executesql @sql;';
EXEC sp_executesql @sql;
这真是丑陋来看待,而PRINT
命令不一定会完全归因于Management Studio中的输出限制。但是,一旦您确信前几个命令看起来正确,您可以对此发表评论并取消注释,并再次运行脚本以进行更改。 GO在那里,因为有些可能会失败。您可能需要为每个数据库/表/列组合添加打印输出,以便您可以打印状态消息,以更轻松地将任何潜在错误与实际数据库/表/列相关联。
相关问题
- 1. 更改所有列WHERE数据类型
- 2. SQL:遍历数据库中的所有列并更改类型
- 3. 如何在SQL Server 2008中将所有varchar数据类型列更改为Nvarchar数据类型列
- 4. 如何在BigQuery中选择数据的列有所有NULL值
- 5. 将SQL Server数据库中的所有varchar列更改为nvarchar
- 6. 将varchar更改为数据库中所有表列的nvarchar
- 7. Django - 如何将colum的所有值更改为null?
- 8. R将类型因子的所有列更改为数字
- 9. 如何在表中将所有空字符串更改为NULL?
- 10. 如何在数组中将所有值设置为false?
- 11. 如何在所有操作中将更改的值记录到数据库?
- 12. 更改数据库中所有对象的所有权
- 13. 如何将所有变量的数据类型一次性更改为因子
- 14. 如何修剪所有类型为string的表中所有行的所有列?
- 15. 将阵列中的所有正数值更改为1(Python)
- 16. 搜索db2数据库所有表的所有列中的值
- 17. 如何在False中更改列表中的所有True值,反之亦然
- 18. 将Int64类型的数据表列中的所有值更改为在C#中键入Datetime
- 19. 如何列出MSSQL中的所有表?
- 20. 更改数据库位置将删除所有者模式
- 21. 如何更改PostgreSQL中的列类型和所有外键?
- 22. 将缺省值设置为数据库中的所有列
- 23. 你如何在sql中更改数据库的所有者?
- 24. 如何将我的数据库中的所有表更改为UTF8字符集?
- 25. 从所有数据库的所有表中获取'date/datetime'数据类型的列的最大值
- 26. 在PostgreSQL中更改某个数据类型的表中的所有列9.6
- 27. 如何在JavaScript中将对象的所有值设置为null?
- 28. 更改FlashIDE文档库中所有符号的所有TextField值
- 29. 如何将所有空值为NULL的列更新为空字符串?
- 30. python-如何将整列中的所有值从整数更改为字符串