在 Sql Server 2008 R2 中更新所有日期时间字段到日期



是否有任何快捷方式可以使用单个查询将所有datetime字段更改为SQL SERVER 2008 R2中的date字段,或者类似的东西,我需要将所有datetime字段(包括table designstored procedures中的字段)更改为date字段。

如果您有足够的权限,则可以通过查询某些系统视图并执行动态 SQL 来执行类似操作。不过,公平的警告 - 如果这不是非常小心地完成,它可能会真正搞砸事情。更改数据类型是这样的事情,尽管很乏味,但受益于有人来监视它。我的代码应该只是一个插图,而不仅仅是复制和粘贴。

对于表字段,您可以使用INFORMATION_SCHEMA.COLUMNS视图查找datetime列,然后为每个列执行 DDL 语句。这意味着您需要使用游标,这对于生产中的 DML 语句来说是不受欢迎的,但我认为对于这些类型的 DDL 语句通常没问题。我将省略很多游标代码,因为这里重要的只是逻辑;如果您在编写该代码时需要帮助,请告诉我。

获取所有日期时间列的表名和列名:

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'datetime'

然后,使用这些来执行一些动态 SQL:

DECLARE @sql nvarchar(4000);
SET @sql = N' ALTER TABLE ' + QUOTENAME(@table_name)
             + N' ALTER COLUMN ' + QUOTENAME(@column_name)
             + N' date NULL';
EXEC @sql;
对于存储过程

,可以像这样获取存储过程的全文:

SELECT m.definition
FROM sys.objects AS o
INNER JOIN sys.sql_modules AS m
  ON o.object_id = m.object_id
WHERE o.type = 'P';

这将为您提供每个过程的CREATE PROCEDURE命令的文本。然后,您可以运行如下内容:

SET @definition = REPLACE(
                    REPLACE(@definition, 'CREATE PROCEDURE', 'ALTER PROCEDURE')
                    , 'datetime', 'date');
EXEC @definition;

相关内容

  • 没有找到相关文章

最新更新