sql - SQL Server 通过“WITH”语句更新并加入
问题描述
我希望能够一次更新一个表,而不是多个语句,我不想制作一个临时表。
为了测试这一点,我制作了这张表:
USE [SomeSchema]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [SomeSchema].[TestTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TextField] [varchar](250) NULL,
[updateField] [varchar](20) NULL,
CONSTRAINT [Pk_TestTable_Id] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
CONSTRAINT [Idx_TestTable] UNIQUE NONCLUSTERED
(
[TextField] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
我试图将这两个答案(https://stackoverflow.com/a/57965771和https://stackoverflow.com/a/32431922/369122)组合成一个工作声明。
我的最后一次尝试:
WITH NewData AS
(
SELECT * FROM ( VALUES ('abc', 'A'),('def','d'),('ghi','g'))
x
(TextField, updateField)
)
update [SomeSchema].[TestTable]
set _a.updateField= _b.updateField
from
[SomeSchema].[TestTable] _a,
NewData _b
where _a.TextField=_b.TextField
出现此错误:Msg 4104, Level 16, State 1, Line 22 无法绑定多部分标识符“_a.updateField”。
有什么建议么?作为记录; 这只是一个测试。在实践中,我需要能够连接多个列来更新一个或多个列。谢谢,
马蒂斯
@larnu 的回答完成了这项工作:
“至于问题,将更新 [SomeSchema].[TestTable] 替换为更新 _a。您将 FROM 中的表引用为 UPDATE 的列,但您更新的表被定义为 [TestTable] 的不同实例”
WITH NewData AS
(
SELECT * FROM ( VALUES ('abc', 'a'),('def','d'),('ghi','g'))
x
(TextField, updateField)
)
update _tt
set _tt.updateField= _nd.updateField
from
[SomeSchema].[TestTable] _tt
left join
NewData _nd
on _tt.TextField=_nd.TextField
解决方案
推荐阅读
- flutter - Flutter:为什么 Container 不占用文本大小?
- html - 如何使 HTML 文件的一部分遵循特定的 css 样式表
- reactjs - npm 错误!安装 react-admin/ra-enterprise 时的代码 E404
- python - PyMongo:在数组数组中拉出一个对象
- python - 在 Pandas 中,如何根据仅影响某些条目的条件过滤所有行以获得唯一 ID?
- javascript - ExtJS中模型中URL中间的ID
- graphql - GraphQL 端点是否应该返回物化视图或域模型?
- elasticsearch - 如何使用默认值“现在”索引日期字段?
- c# - 如何为航点添加随机布尔标志?
- python - 选择圆用于 cv2 选择 (ROI)