Ibr*_*him -2 sql sql-server sql-server-2008-r2 sql-update
在SQL Server中,如果我有两个表,每个表有(25)列,如何通过SELECT更新表?
查询是:
UPDATE
Table1
SET
Table1.col1 = Table2.col1,
Table1.col2 = Table2.col2,
...
...
...
Table1.col25 = Table2.col25,
FROM
Table1
INNER JOIN
Table2
ON
Table1.id = Table2.id
Run Code Online (Sandbox Code Playgroud)
但有没有办法更新所有列而不写上面的例子所有25列?
在SSMS中使用对象资源管理器,找到有问题的表并展开节点,以便您看到列,键,约束,触发器,索引和统计信息
将Columns文件夹拖到查询窗口窗格中.这会在一行中生成列空间分隔的列列表.
我们将使用正则表达式将数据转换为所需的格式.
要知道的事情.
\n 是换行符/回车/输入
^ 匹配一行的开头
. 一次匹配任何东西
* 只要它可以去,就重复比赛
我会标记我们匹配的单词,以便我们可以用它做点什么.这来自括号{}.当事情被括号括起来时,我们对序数的引用会增加.在这里,我们只使用一个/1就足够了.
正则表达式是贪婪的,这意味着它将尽可能匹配,这不是我们想要的.不幸的是,SSMS 只支持贪婪的比赛,因此我们必须进行多次传球
https://www.simple-talk.com/sql/sql-training/regex-based-finding-and-replacing-of-text-in-ssms/
理论发现: {.*?},
(注意上面的尾随空格)
\n, T1.\1 = T2.\1在此步骤中,我们将强制所有列都存在于一行中
重要说明:查找内容中包含一个尾随空格
,\nCurrent DocumentRegular expressions开始
environment_id, environment_name, folder_id, description, created_by_sid, created_by_name, created_time
Run Code Online (Sandbox Code Playgroud)
结果
environment_id
environment_name
folder_id
description
created_by_sid
created_by_name
created_time
Run Code Online (Sandbox Code Playgroud)
我们现在已经采用了所有列,并将它们展平在左边缘.
我们将采用所有单词并用T1 = T2包装它们
除了我是一个领先的逗号人之外,我将使我的输出看起来与你的相似.
^{.*}, T1.\1 = T2.\1Current DocumentRegular expressions启动environment_id environment_name folder_id说明created_by_sid created_by_name created_time
结果
, T1.environment_id = T2.environment_id
, T1.environment_name = T2.environment_name
, T1.folder_id = T2.folder_id
, T1.description = T2.description
, T1.created_by_sid = T2.created_by_sid
, T1.created_by_name = T2.created_by_name
, T1.created_time = T2.created_time
Run Code Online (Sandbox Code Playgroud)
现在你有一个很好的,几乎干净的列翻译列表.修剪第一个逗号并将其打入UPDATE语句
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |