SQL Server更新多行

时间:2018-01-25 08:52:28

标签: sql sql-server

我有一张桌子11(身份证,状态)。 它是在测试环境中创建的,我对此表拥有完整的权限。 有时我需要使用来自不同环境的状态来更新它 - 让我们称之为table2。在这个表/服务器上我只有读权限 由于安全规则,我们在不同的服务器中存在无法通信的数据...所以我从一个环境中提取数据并在更新之前将其存储在本地。 我有MS SQL服务器

如果我想更新1行,我将使用

update Table set status = status1 where id = ID1

但我有很多行:)到目前为止,我能想到的最好的是使用excel生成一长串的更新语句,如上所述,但是不是更简单/更优雅的方式吗?

我只能在表/服务器上使用“正确的数据”

读取权限

1 个答案:

答案 0 :(得分:1)

您可以在不使用Excel的情况下执行建议,这是一个SQL Server示例,其中@tbl1位于服务器1上,@tbl2位于服务器2上:

DECLARE @tbl1 TABLE ( id INT, [status] NVARCHAR(10) )
DECLARE @tbl2 TABLE ( id INT, [status] NVARCHAR(10) )

-- @tbl1 data is different and needs to be sync'd to @tbl2
INSERT INTO @tbl1 ( id , [status] ) VALUES ( 1, 'd' ), ( 2, 'e' ), ( 3, 'f' )
INSERT INTO @tbl2 ( id , [status] ) VALUES ( 1, 'a' ), ( 2, 'b' ), ( 3, 'c' )

-- show current data
SELECT * FROM @tbl1 AS t
SELECT * FROM @tbl2 AS t

-- run a command like this on @tbl1 to generate UPDATE statements
SELECT 'UPDATE @tbl2 SET [status] = ''' + [status] + 
       ''' WHERE id = ' + CAST(t.id AS NVARCHAR(5))
FROM @tbl1 AS t

-- the above will generate this sql, which you can copy across and run on server 2
UPDATE @tbl2 SET [status] = 'd' WHERE id = 1
UPDATE @tbl2 SET [status] = 'e' WHERE id = 2
UPDATE @tbl2 SET [status] = 'f' WHERE id = 3

-- running the generated SQL on server 2 would then give you matching results
SELECT * FROM @tbl1 AS t
SELECT * FROM @tbl2 AS t

您可以将结果显示为文本或导出到文件,而不是标准的结果到网格输出,以便更轻松地复制/运行生成的SQL,并可能创建第一步自动化流程。

您可以通过工具>下面突出显示的快捷方式找到查询结果输出选项。菜单中的选项:

enter image description here

<强>摘要

您希望在源服务器上运行的实际SQL是这样的:

-- run a command like this on @tbl1 to generate UPDATE statements
SELECT 'UPDATE @tbl2 SET [status] = ''' + [status] + 
       ''' WHERE id = ' + CAST(t.id AS NVARCHAR(5))
FROM @tbl1 AS t

然后你将把结果带走以在目标服务器上运行。