派生表 't' 不可更新,因为派生表中的某一列是派生的或是常量。

海蓝树 2011-04-28 08:54:57
update t set homecode =substring(homecode,2,4) from (select homecode from dbo.Archives_CM where homecode in (select homecode from dbo.Archives_CM group by homecode having len(homecode)>4)) as t


如果要实现对于group by后的更新如何处理
...全文
445 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2011-04-28
  • 打赏
  • 举报
回复
GROUP BY后面的查询放入临时表 然后再处理

2005以上可以放入CTE再处理
renwenli07461 2011-04-28
  • 打赏
  • 举报
回复
update t set homecode =substring(homecode,2,4) from (select homecode from dbo.Archives_CM where homecode in (select homecode from dbo.Archives_CM group by homecode having len(homecode)>4) as A) as t

rucypli 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwwgou 的回复:]
SQL code
UPDATE dbo.Archives_CM
SET homecode = SUBSTRING(homecode, 2, 4)
WHERE LEN(homecode) > 4
[/Quote]1
快溜 2011-04-28
  • 打赏
  • 举报
回复

--直接查,何必要update,
select substring(homecode,2,4) as homecode
from dbo.Archives_CM
where homecode in (select homecode from dbo.Archives_CM group by homecode having len(homecode)>4)
--或者
select homecode into #tb
from dbo.Archives_CM
where homecode in (select homecode from dbo.Archives_CM group by homecode having len(homecode)>4)


update t set homecode =substring(homecode,2,4)
from #tb t
cs_lb 2011-04-28
  • 打赏
  • 举报
回复
不知道你想做什么?

如果想更新则

UPDATE dbo.Archives_CM
SET homecode = SUBSTRING(homecode, 2, 4)
WHERE LEN(homecode) > 4


如果是想查询则

SELECT SUBSTRING(homecode, 2, 4) AS homecode
FROM dbo.Archives_CM
WHERE LEN(homecode) > 4
Shawn 2011-04-28
  • 打赏
  • 举报
回复
或用CTE来更新.
CREATE TABLE #Archives_CM(homecode VARCHAR(10))
INSERT #Archives_CM
SELECT '1234' UNION ALL
SELECT '12345' UNION ALL
SELECT '123456' UNION ALL
SELECT '123456'
GO
--SQL:
;WITH cte AS
(
SELECT homecode
FROM #Archives_CM
WHERE homecode IN ( SELECT homecode
FROM #Archives_CM
GROUP BY homecode
HAVING LEN(homecode) > 4 )
)
UPDATE t
SET homecode = SUBSTRING(homecode, 2, 4)
FROM cte t
GO
--RESULT
SELECT * FROM #Archives_CM
/*
1234
2345
2345
2345
*/
Shawn 2011-04-28
  • 打赏
  • 举报
回复
UPDATE dbo.Archives_CM
SET homecode = SUBSTRING(homecode, 2, 4)
WHERE LEN(homecode) > 4
叶子 2011-04-28
  • 打赏
  • 举报
回复
把group by 后的数据放到临时表,然后更新临时表。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧