该列是“CreatedDateTime”,这是不言自明的。它跟踪提交记录的任何时间。我需要在超过 100 个表中更新这个值,并且宁愿有一个很酷的 SQL 技巧在几行中完成,而不是复制粘贴 100 行,唯一的区别是表名。
任何帮助都将不胜感激,很难找到关于跨表更新列的任何内容(这很奇怪,而且可能是不好的做法,对此我深表歉意)。
谢谢!
编辑:这篇文章向我展示了如何获取所有包含该列的表
如果这有任何帮助。无论如何,这对我来说是一个开始。
该列是“CreatedDateTime”,这是不言自明的。它跟踪提交记录的任何时间。我需要在超过 100 个表中更新这个值,并且宁愿有一个很酷的 SQL 技巧在几行中完成,而不是复制粘贴 100 行,唯一的区别是表名。
任何帮助都将不胜感激,很难找到关于跨表更新列的任何内容(这很奇怪,而且可能是不好的做法,对此我深表歉意)。
谢谢!
编辑:这篇文章向我展示了如何获取所有包含该列的表
如果这有任何帮助。无论如何,这对我来说是一个开始。
如果这是一次性任务,只需运行此查询,将结果复制并粘贴到查询窗口并运行它
Select 'UPDATE ' + TABLE_NAME + ' SET CreatedDateTime = ''<<New Value>>'' '
From INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'CreatedDateTime'
您可以尝试使用光标:像这样
declare cur cursor for Select Table_Name From INFORMATION_SCHEMA.COLUMNS Where column_name = 'CreatedDateTime'
declare @tablename nvarchar(max)
declare @sqlstring nvarchar(max)
open cur
fetch next from cur into @tablename
while @@fetch_status=0
begin
--print @tablename
set @sqlstring = 'update ' + @tablename + ' set CreatedDateTime = getdate()'
exec sp_executesql @sqlstring
fetch next from cur into @tablename
end
close cur
deallocate cur
您可以使用 Information_Schema.Columns 为您构建更新脚本。
Declare @ColName as nVarchar(100), @NewValue as nVarchar(50)
Set @ColName = 'Modified' -- 'your col name'
Set @NewValue = '2013-11-04 15:22:31' -- your date time value
Select 'Update ' + TABLE_NAME + ' set ' + COLUMN_NAME + ' = ''' + @NewValue + '''' From INFORMATION_SCHEMA.COLUMNS Where column_name = 'modified'