我有一個數據庫,我有很多位類型的列。 添加其他列之後,我需要所有舊列都具有默認的「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-如何將整列中的所有值從整數更改爲字符串