我必须更改数据库中所有表(SQL Server)中所有作为日期的列,并将它们转换为DateTime。
我该怎么做?是命令吗?
答案 0 :(得分:0)
更改数据类型必须调用的更改列命令是-> ALTER COLUMN
。 ALTER COLUMN
命令只能在ALTER TABLE
命令的上下文中调用。您很幸运,因为您要转换为的数据类型与转换兼容,并且只会加宽列。如果您尝试转换为不兼容的数据类型或需要较少存储空间的数据类型,则无法使用下面的简单命令。
ALTER TABLE YourTableName
ALTER COLUMN YouDateField DATETIME
答案 1 :(得分:0)
我认为这可以为您提供帮助:
执行脚本,您将在消息选项卡中看到更新列表。
DECLARE @SQLString VARCHAR(MAX)=''
SELECT @SQLString = @SQLString +CHAR(13)+'ALTER TABLE '+T.TABLE_SCHEMA+'.'+T.TABLE_NAME+' ALTER COLUMN '+C.COLUMN_NAME+' DATETIME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_SCHEMA=C.TABLE_SCHEMA
AND T.TABLE_NAME=C.TABLE_NAME
WHERE C.DATA_TYPE='date'
AND T.TABLE_TYPE='BASE TABLE'
PRINT(@SQLString)
答案 2 :(得分:0)
您可以使用此查询来获取日期类型列的alter查询的集合。
SELECT
CONCAT('alter table ', TABLE_SCHEMA, '.', TABLE_NAME, ' ALTER COLUMN ', COLUMN_NAME, ' DATETIME;')
FROM INFORMATION_SCHEMA.COLUMNS
Where DATA_TYPE = 'date' and TABLE_SCHEMA not in ('information_schema', 'sys');
然后通过执行生成的结果,您的表列将被转换为DateTime
答案 3 :(得分:0)
使用sys.columns和sys.types生成动态语句并执行生成的语句。
该语句还检查每列的nullability
。
ALTER TABLE ... ALTER COLUMN
并非总是可行的解决方案。在某些情况下,您可能需要删除表并重新创建它,或添加新列,然后将旧列的值复制到新列中,然后删除原始列。
更改列时,请至少考虑以下内容:
T-SQL:
DECLARE
@stm nvarchar(max),
@err int
SELECT @stm = (
SELECT CONCAT(
'ALTER TABLE ', OBJECT_NAME(c.OBJECT_ID),
' ALTER COLUMN ',
c.name,
' datetime',
CASE
WHEN c.is_nullable = 1 THEN ' NULL '
ELSE ' NOT NULL '
END,
'; '
)
FROM sys.columns AS c
JOIN sys.types AS t ON c.user_type_id = t.user_type_id
WHERE t.name = 'date'
ORDER BY c.OBJECT_ID
FOR XML PATH('')
)
PRINT @stm
EXEC @err = sp_executesql @stm
IF @err = 0
PRINT 'OK'
ELSE
PRINT 'Error'