在 SQL 服务器中更新 Table 变量并获取 必须声明标量变量

Update Table Variable in SQL Server and getting Must declare the scalar variable

如果需要,我可以更改为临时 table,但是当我对 sql 中的 table 变量执行 UPDATE 时服务器,为什么我会收到此错误 我该如何解决,我应该切换到临时 table 吗?

Must declare the scalar variable "@rpmuserTableVariable".

DECLARE @rpmuserTableVariable TABLE
(
 [usr_id] [varchar](8) NOT NULL,
    [usr_fnm] [varchar](64) NOT NULL,
    [usr_lnm] [varchar](64) NOT NULL,
    [usr_pwd] [varchar](64) NOT NULL,
    [email_id] [varchar](250) NULL,
    [wwid] [varchar](8) NULL,
    [tel] [char](20) NULL,
    [dflt_ste_id] [int] NOT NULL,
    [lst_pwd_chg_dtm] [datetime] NULL,
    [lst_accs_dtm] [datetime] NULL,
    [apprvr_wwid] [varchar](8) NULL,
    [inact_ind] [varchar](1) NOT NULL,
    [cre_usr_id] [varchar](8) NOT NULL,
    [cre_dtm] [datetime] NOT NULL,
    [chg_usr_id] [varchar](8) NULL,
    [chg_dtm] [datetime] NULL,
    [salt] [varchar](20) NULL,
    STATUS [char] (1) NULL 
);

-- All Active Users  
INSERT INTO @rpmuserTableVariable
SELECT *  ,'0'                       
FROM rpm_scrty_rpm_usr WITH(NOLOCK)                                             
WHERE inact_ind = 'N'
-- Internal Users  
UPDATE @rpmuserTableVariable 
SET STATUS = 1 
FROM rpm_scrty_rpm_usr ru WITH(NOLOCK)                      
INNER JOIN rpm_scrty_emp_info ei WITH(NOLOCK)                      
       ON ru.wwid = ei.wwid                    
WHERE ru.inact_ind = 'N'                       
AND ei.inact_ind = 'N'
AND ei.dmn_addr IS NOT NULL   
AND @rpmuserTableVariable.usr_id = ru.usr_id 


select * from @rpmuserTableVariable

我需要使用临时 table #tempblah 还是需要 "trick" 才能做到这一点?

此外,我可以进行批量更新吗我不需要执行 WHILE 循环吗?

不需要。您只需要一个 table 别名。别名不能以 @:

开头
UPDATE rtv
    SET STATUS = 1 
FROM @rpmuserTableVariable rtv INNER JOIN
     rpm_scrty_rpm_usr ru WITH(NOLOCK)
     ON rtv.usr_id = ru.usr_id INNER JOIN
     rpm_scrty_emp_info ei WITH(NOLOCK)                      
     ON ru.wwid = ei.wwid                    
WHERE ru.inact_ind = 'N' AND                   
      ei.inact_ind = 'N' AND
      ei.dmn_addr IS NOT NULL;