0

次のようなフィールドと呼ばれるテーブルがあります。

 Name          | Table
---------------+----------------
 DateFound     | Table1
 DateUpdate    | Table2
 DateCharge    | Table3
 DateLost      | Table4
 DateDismissed | Table5

そして、私がやりたいことは、指定されたテーブルのすべてのフィールドの年を 2013 に変更することです。それらはすべて、それぞれのテーブルの日時フィールドです。したがって、基本的には、Table1 で DateFound を 2009 年 6 月 12 日 16:14:23 から 2013 年 6 月 12 日 16:14:23 に変更したいと考えています。

次のようなことを言ってこれを行うのは簡単ですか?

SELECT (SELECT [Name]
          FROM fields)
  FROM (SELECT [Table]
          From fields)
4

3 に答える 3

1

このようなカーソルと動的SQLを試してください。

DECLARE @changeYear datetime
SET @changeYear = '2013-01-01'
DECLARE @tableName varchar(50), @columnName varchar(50)

Declare updateTime_Cursor Cursor FOR
   select name, table from fields

OPEN updateTime_Cursor

FETCH NEXT FROM updateTime_Cursor
  INTO @columnName, @tableName

WHILE @@FETCH_STATUS = 0
BEGIN

      DECLARE @sql nvarchar(1000)
      SELECT @sql = 'Update dbo.'+@tablename+' set '+@columnName+' = DATEADD(yy,  DATEDIFF(yy, '+@columnName+', @changeYear), '+@columnName+')'
      EXEC sp_executesql @sql, N'@changeYear datetime',changeYear
END

CLOSE updateTime_Cursor
DEALLOCATE updateTime_Cursor
于 2013-06-21T18:28:19.403 に答える
0

使用している SQL の方言を示していませんでしたが、mysql スクリプトを生成して、次のように実行できます。

select concat('update ',table_name, ' set ', column_name, ' = DATE_FORMAT(',
  column_name,', ''2013-%m-%d %T''', ');')
  from my_table

このsqlfiddleあたり

于 2013-06-21T18:29:01.623 に答える