Sql server 2012 SQL更新多行而不硬编码每个值

Sql server 2012 SQL更新多行而不硬编码每个值,sql-server-2012,Sql Server 2012,我想更新数千行,但输入每个值都会耗费时间 我的代码 UPDATE #table SET city = 'New York' WHERE city is null AND store_id = '22' 预期结果 store_id city state 22 New york NY 22 New york NY 22 New york NY 33 LA CA 33 LA

我想更新数千行,但输入每个值都会耗费时间

我的代码

UPDATE #table
SET city = 'New York'
WHERE city is null
AND store_id = '22'
预期结果

store_id   city      state
22        New york   NY
22        New york   NY
22        New york   NY
33         LA        CA
33         LA        CA

如何修改代码,使我不必每次都键入“纽约”等?谢谢

这是我想到的,但我相信有一种更优化的方法可以做到这一点:

WITH cteCities(store_id, city, state) AS
    (SELECT DISTINCT store_id, city, state FROM #table WHERE city IS NOT NULL)
UPDATE #table
SET city = cte.city, state = cte.state
FROM cteCities cte
INNER JOIN #table
ON cte.store_id = #table.store_id
WHERE #table.city IS NULL

您的问题很不清楚:您想用第一个城市的值更新store_id=“X”和city为空/空的每个记录吗?所有不同的商店都有一个与之相关的城市名称吗?所有这些值都是固定的还是来自另一个表?@JoshPart“New York”不必出现在第一条记录中,因为有许多行有“New York”,是的,总是一个id绑定到一个城市它在SQL server中工作,但在AWS中不工作,我将CTE更改为临时表,但AWS给出另一个错误“[Amazon](500310)无效操作:多次指定表名“#t;”
CREATE TABLE #t (store_id varchar(20),city varchar(20),[state] varchar(20))
INSERT INTO #t VALUES
('22', 'new', 'NY'),
('22', null, null),
('22', null, null),
('33', null, null),
('33', 'LA', 'CA')
;


WITH CTE AS 
(
    SELECT DISTINCT store_id, city, [state] FROM #t WHERE city IS NOT NULL
)
UPDATE #t
SET city = CTE.city, [state] = CTE.[state]
FROM CTE
INNER JOIN #t
ON CTE.store_id = #t.store_id
WHERE #t.city IS NULL