Sql 将选择查询更改为更新

Sql 将选择查询更改为更新,sql,sql-update,Sql,Sql Update,我无法将下面的选择查询更改为更新查询。有人能帮忙吗 SELECT CONVERT(varchar(10), (ROW_NUMBER() over (order by (select null)))) + 'Test@' +(SELECT SUBSTRING(Email, CHARINDEX('@', Email) + 1, LEN(Email) - CHARINDEX('@', Email))) as Email ,CONVERT(varchar(10), (ROW_NUMBER() over

我无法将下面的选择查询更改为更新查询。有人能帮忙吗

SELECT 
CONVERT(varchar(10), (ROW_NUMBER() over (order by (select null)))) + 'Test@' +(SELECT SUBSTRING(Email, CHARINDEX('@', Email) + 1, LEN(Email) - CHARINDEX('@', Email))) as Email
,CONVERT(varchar(10), (ROW_NUMBER() over (order by (select null)))) + 'Media' as [Last Name]
from dbo.MPP_Inserts as MT
我尝试了以下操作,但收到一条错误消息:

窗口函数可以显示在select或order by子句中)


看起来您正在使用SQL Server。如果是,则您有可更新的CTE:

with toupdate as (
    SELECT mt.*,
           CONVERT(varchar(10), (ROW_NUMBER() over (order by (select null)))) + 'Test@' +(SELECT SUBSTRING(Email, CHARINDEX('@', Email) + 1, LEN(Email) - CHARINDEX('@', Email))) as new_Email,
           CONVERT(varchar(10), (ROW_NUMBER() over (order by (select null)))) + 'Media' as new_lastname
    from dbo.MPP_Inserts MT
   )
update toupdate
    Set Email = new_email,
       [Last Name] = new_lastname;
子字符串中嵌套的
select
是完全不必要的,但是我将保持表达式不变,以便它们与查询中的表达式相同。但是,
new_email
可以表示为:

CONVERT(varchar(10), (ROW_NUMBER() over (order by (select null)))) + 'Test@' +SUBSTRING(Email, CHARINDEX('@', Email) + 1, LEN(Email) - CHARINDEX('@', Email)) as new_Email,

第一件事是将dbo.MPP\u插入中的
作为MT
字符串在末尾删除。。。
CONVERT(varchar(10), (ROW_NUMBER() over (order by (select null)))) + 'Test@' +SUBSTRING(Email, CHARINDEX('@', Email) + 1, LEN(Email) - CHARINDEX('@', Email)) as new_Email,