我有这样的表格结构:
表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获得第一个值
知道如何实现这个目标吗?
答案 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 !!!
感谢。