Mel*_*Mel 3 sql t-sql sql-server sql-server-2008
我有一个包含许多表的SQL Server 2008数据库.我一直在使用现在蹩脚的datetime数据类型,并希望使用新的和更好的datetime2.在我有一个datetime字段的大多数地方,相应的列名是Timestamp.是否有任何地方,从做批量修改datatime来datetime2?
在Management Studio中运行此命令,将结果复制并粘贴到新的查询窗口中:
select 'ALTER TABLE ' + OBJECT_NAME(o.object_id) +
' ALTER COLUMN ' + c.name + ' DATETIME2 ' +
CASE WHEN c.is_nullable = 0 THEN 'NOT NULL' ELSE 'NULL' END
from sys.objects o
inner join sys.columns c on o.object_id = c.object_id
inner join sys.types t on c.system_type_id = t.system_type_id
where o.type='U'
and c.name = 'Timestamp'
and t.name = 'datetime'
order by OBJECT_NAME(o.object_id)
Run Code Online (Sandbox Code Playgroud)
这可能是一种蛮力方法,但您始终可以datetime使用sys.columns视图查找数据类型的所有列,获取表名和列名,使用游标迭代该列表,并为每个条目生成一个 ALTER TABLE像这样的声明:
ALTER TABLE @tablename ALTER COLUMN @columnname datetime2
Run Code Online (Sandbox Code Playgroud)
然后用 运行所述语句EXEC。显然,您需要拥有查询权限sys.columns和ALTER所有这些表的权限......
抱歉,这个答案中没有更多代码 - 这台机器上没有 SSMS 的副本,并且无法从内存中记住所有这些的语法。:)