在 SQL 服务器中将列类型从 TinyInt 转换为 Int
Convert column type from TinyInt to Int in SQL Server
我有一个包含很多表的数据库。数百列的类型为 TinyInt
。我需要将它们全部转换为 Int
。是否可以使用存储过程来做到这一点?
对此没有简单的解决方案。
最简单的方法是只拥有一个 T-SQL 脚本,您可以 运行 生成 T-SQL ALTER TABLE .... ALTER COLUMN ...
脚本作为输出(在每个数据库级别上),然后您可以将其复制并粘贴到 SQL Server Management Studio。
类似于:
SELECT
ColName = c.Name,
SchemaName = s.Name,
TableName = t.Name,
AlterCommand = 'ALTER TABLE ' + QUOTENAME(s.Name) + '.' + QUOTENAME(t.Name) +
' ALTER COLUMN ' + QUOTENAME(c.name) + ' INT' +
CASE WHEN c.is_nullable = 1 THEN ' NULL;' ELSE ' NOT NULL;' END
FROM
sys.columns c
INNER JOIN
sys.types ty ON ty.system_type_id = c.system_type_id
INNER JOIN
sys.tables t ON t.object_id = c.object_id
INNER JOIN
sys.schemas s ON s.schema_id = t.schema_id
WHERE
ty.name = 'tinyint'
另一种选择是将此代码包装到一个过程中,该过程将创建一个 ALTER TABLE ... ALTER COLUMN ...
SQL 语句作为动态 SQL 语句,然后执行每个语句,遍历所有 TINYINT
列。但同样:这将在每个数据库级别上进行。
或者,如果您可以从头开始创建这些数据库,您还可以将所有表的 CREATE TABLE
脚本编写到一个文本文件中,替换 TINYINT
在文本编辑器中使用 INT
,然后 运行 再次针对新数据库/服务器创建脚本。
我有一个包含很多表的数据库。数百列的类型为 TinyInt
。我需要将它们全部转换为 Int
。是否可以使用存储过程来做到这一点?
对此没有简单的解决方案。
最简单的方法是只拥有一个 T-SQL 脚本,您可以 运行 生成 T-SQL ALTER TABLE .... ALTER COLUMN ...
脚本作为输出(在每个数据库级别上),然后您可以将其复制并粘贴到 SQL Server Management Studio。
类似于:
SELECT
ColName = c.Name,
SchemaName = s.Name,
TableName = t.Name,
AlterCommand = 'ALTER TABLE ' + QUOTENAME(s.Name) + '.' + QUOTENAME(t.Name) +
' ALTER COLUMN ' + QUOTENAME(c.name) + ' INT' +
CASE WHEN c.is_nullable = 1 THEN ' NULL;' ELSE ' NOT NULL;' END
FROM
sys.columns c
INNER JOIN
sys.types ty ON ty.system_type_id = c.system_type_id
INNER JOIN
sys.tables t ON t.object_id = c.object_id
INNER JOIN
sys.schemas s ON s.schema_id = t.schema_id
WHERE
ty.name = 'tinyint'
另一种选择是将此代码包装到一个过程中,该过程将创建一个 ALTER TABLE ... ALTER COLUMN ...
SQL 语句作为动态 SQL 语句,然后执行每个语句,遍历所有 TINYINT
列。但同样:这将在每个数据库级别上进行。
或者,如果您可以从头开始创建这些数据库,您还可以将所有表的 CREATE TABLE
脚本编写到一个文本文件中,替换 TINYINT
在文本编辑器中使用 INT
,然后 运行 再次针对新数据库/服务器创建脚本。