【发布时间】:2019-09-12 16:26:58
【问题描述】:
我正在尝试查找要更新的最新表格。服务器中的大多数表都有一个名为“lastmodified”之类的列。
我在这方面的方法是尝试选择所有表名(以及相应的列名,如'%lastmodified%')并通过循环运行它们。
该循环旨在从每个表中选择最大的 lastmodified 日期。
我一直在玩 EXEC 语句,以便从局部变量 @tablename 中提取 select 语句。
SELECT c.name columnname
,t.name tablename
into #looptemp
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%lastmodified%'
ORDER BY TableName
,ColumnName
alter table #looptemp add
ID INT IDENTITY(1,1)
alter table #looptemp add
lastmod date
declare @run INT
declare @column varchar(1028)
declare @tablename varchar(1028)
declare @datein date
set @run = 1
while (@run <= (select Max(ID) from #looptemp))
Begin
set @column = (Select columnname from #looptemp where ID = @run)
set @tablename = (select '(''' + tablename + ''')' from #looptemp where ID = @run)
set @datein = EXEC('SELECT max(@column) FROM ' + @tablename)
update #looptemp set lastmod = @datein
set @run =@run + 1
End
没有 Execute 行:“必须声明变量 @tablename” 使用 EXEC 行时,我得到一个语法错误,并且 EXEC 之前的等号被突出显示。
【问题讨论】:
-
set @datein = EXEC(..)语法错误。你想在这条线上做什么?看sp_executesqldocs.microsoft.com/en-us/sql/relational-databases/… -
我正在尝试为每个表名选择最大上次编辑日期并将其存储在@datein 中。我的目标是为临时表添加为每一行添加的最大上次修改日期。
标签: sql sql-server dynamic-sql