Sql server 在SQL Server中将列类型从TinyInt转换为Int

Sql server 在SQL Server中将列类型从TinyInt转换为Int,sql-server,sql-server-2008,stored-procedures,sql-server-2012,sql-server-2008-r2,Sql Server,Sql Server 2008,Stored Procedures,Sql Server 2012,Sql Server 2008 R2,我有一个包含很多表的数据库。数百列的类型为TinyInt。我需要将它们全部转换为Int。使用存储过程可以做到这一点吗?这不是一个简单的解决方案 最简单的方法是只需要运行一个T-SQL脚本,它将生成T-SQLALTER TABLE。。。。将列…脚本更改为输出(在每个数据库级别上),然后可以在SQL Server Management Studio中复制和粘贴这些脚本 比如: SELECT ColName = c.Name, SchemaName = s.Name, Tabl

我有一个包含很多表的数据库。数百列的类型为
TinyInt
。我需要将它们全部转换为
Int
。使用存储过程可以做到这一点吗?

这不是一个简单的解决方案

最简单的方法是只需要运行一个T-SQL脚本,它将生成T-SQL
ALTER TABLE。。。。将列…
脚本更改为输出(在每个数据库级别上),然后可以在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'
另一个选项是将此代码包装到一个过程中,该过程将创建一个
altertable。。。将COLUMN…
SQL语句更改为动态SQL语句,然后执行每个语句,迭代所有
TINYINT
列。但同样:这将是在每个数据库级别上进行的


或者,如果您可以从头开始创建这些数据库,也可以将所有表的
create TABLE
脚本编入文本文件,在文本编辑器中将
TINYINT
替换为
INT
,然后针对新的数据库/服务器再次运行这些创建脚本。

首先,为什么要标记3个不同版本的SQL Server?其次,为什么要在存储过程中执行此操作?这是一个一次性事件。您的意思是要使用存储过程将数据库中的所有tinyint列更改为int吗?@DanGuzman,是的。我想使用存储过程更改tinyint列,使它们成为int。我已经运行了一个查询表单
AlterCommand
。但我看到的错误是,
ALTER TABLE ALTER COLUMN失败,因为表'once'中不存在列'dbo'。**这里
once
是我的表名**@marc_s不应该是
+'ALTER COLUMN'+c.name
-引用列名而不是架构吗name@IdontKnowEnglish:对不起,我不明白你的评论最初-是的,表中需要
s.name
,但您当然是对的-在列中,我应该使用
c.name
-现在修复
QUOTENAME
。哦,是的,人们将有名为
工人工资
的表和名为
%折扣
的列(最好是在你不期望的时候)。@Jeroenmoster:当然-谢谢你的提示-包括在我的帖子中