【发布时间】:2016-10-07 23:45:43
【问题描述】:
如果需要,我可以更改为临时表,但是当我在 sql server 中对表变量执行 UPDATE 时,为什么会出现此错误 我该如何解决,我应该切换到临时表吗?
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
我需要使用临时表#tempblah 还是有“技巧”来做到这一点?
另外,我可以批量更新吗? 我不需要执行 WHILE 循环吗?
【问题讨论】:
-
你知道错误是哪一行/语句抛出的吗?
-
AND @rpmuserTableVariable.usr_id = ru.usr_id
-
谢谢。我认为@GordonLinoff 为您找到了解决方案。
标签: sql sql-server sql-update temp-tables table-variable