gpt4 book ai didi

sql-server - MSSQL : alter column not null, 一般

转载 作者:行者123 更新时间:2023-12-03 09:49:54 25 4
gpt4 key购买 nike

在 Microsoft SQL Server 2008 R2 中,我想将一个可为空的列更改为不为空。显然,我可以通过重述数据类型来做到这一点,如

alter table t alter column c int not null

例如,如果列 t.c 是 int 数据类型。但是一般情况下,如果不重新说明现有数据类型呢?我正在寻找一些等价的
alter table t alter column c not null

现有数据类型保留在原位,并且仅关闭可空性。

背景

我对我的数据库进行了审计,发现许多情况下,列被指定为可为空,但实际上没有出现空值。我想收紧架构以禁止这些列中的空值。手动将 DDL 写入每个“更改列”很容易出错,因为我可能会弄错数据类型。我可以使用模式转储程序自动生成代码,该程序输出每列的现有数据类型,但这也有风险,如果转储程序不知道最新的数据类型并输出其他内容(例如,假设它不知道 datetime2 而是写出 datetime)。

SQL 服务器已经知道列类型是什么,所以肯定有办法告诉它保留它并关闭可空性。

如果除了找到现有的数据类型将其放入 DDL 之外真的没有办法做到这一点,也许您可​​以推荐一个合适的工具来使用?我从 Sybase 时代就知道 dbschema.pl,但可能有更现代的东西,或者一些众所周知的 SQL 片段,可以从模态视图中打印出必要的语句。

最佳答案

两种方法:

1) 展开 this answer包括考虑 max_length、precision、scale 和 collat​​ion_name。如果你有多个模式,你也需要适应它。

SELECT
'ALTER TABLE '
+QUOTENAME(aud.[table_name])
+' ALTER COLUMN '
+QUOTENAME(aud.[column_name])
+TYPE_NAME([system_type_id])
+' NOT NULL;'
FROM MyColumnAuditList aud
INNER JOIN sys.columns col ON (
col.[object_id] = OBJECT_ID(aud.[table_name]) AND
col.[name] = aud.[column_name]
)

2) 在 SSMS 中,右键单击数据库并选择“脚本数据库为”。使用您选择的文本解析工具从结果中提取列定义。

关于sql-server - MSSQL : alter column not null, 一般,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20473674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com