Sql查询根据其他表更新表

时间:2014-11-28 11:52:21

标签: sql-server-2008

我有这样的表格结构:

MainTable

专栏:

Id INT, 
TableName Varchar(50),
StartValue VARCHAR(50) 

此处TableName列包含数据库中存在的所有表的名称

现在我需要更新" StartValue"来自相应表的MainTable中的列。知道如何实现这个目标吗?

示例

MainTable

Id TableName StartValue
----------------------
1  table1      NULL  
2  Table2     Null

我需要通过从表格中的表名中获取前1值来更新StartValue MainTable

表示记录1将从table1获得第一个值,记录2将从table2获得第一个值

知道如何实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

如果要根据另一列中的值更新列,可以使用DynamicSQL构建然后执行查询(可能使用CURSOR循环遍历MainTable的行

DECLARE cur1 CURSOR FOR SELECT TABLENAME FROM MAINTABLE 
OPEN cur1
FETCH NEXT FROM cur1INTO @TABLENAMEWHILE @@FETCH_STATUS = 0
    BEGIN
SET @DYNSQL = 'UPDATE MAINTABLE SET STARTVALUE = SELECT TOP 1 STARTVALUE FROM ' + @TableName + ' WHERE                              
EXEC sp_executesql @DYNSQL

这只是一种方法。关于使用游标和DynamicSQL的注意事项始终适用

答案 1 :(得分:0)

尝试以下方法:

use DBName
go

declare cur cursor for 
select Table_Name from MainTable

declare @var varchar(100)
open cur
fetch next from cur into @var
while @@FETCH_STATUS = 0
begin

declare @sql nvarchar(max)
set @sql = 'update MT set Start_Value = t.Start_Value from MainTable MT cross join ' + @var +' t where MT.Table_Name = ''' + @var +''''
exec sp_executesql @sql
fetch next from cur into @var

end
close cur
deallocate cur

--select * from MainTable

HTH !!!

感谢。