如何在执行Update时将输出插入。*转换为表变量

时间:2016-04-01 20:57:13

标签: sql-server-2005 sql-update insert-into

我正在尝试第一次插入输出而无法理解错误消息:

  

插入错误:列名或提供的值数与表定义不匹配。

目标:我有一个包含许多帐户的巨额索赔表。我想在几个帐户中将值更新为1,并能够显示更新。

所以,我创建了一个@TEMP_tbl,其中包含我想要更新的帐户 * /

DECLARE  @TEMP_tbl TABLE(
SORIGCREDITORREFNO VARCHAR(30),
BCLAIMONHOLD INT)

INSERT INTO @TEMP_tbl (SORIGCREDITORREFNO,BCLAIMONHOLD)
VALUES ('1234',0)

-- writing my update statement

DECLARE @MYVAR TABLE ( SORIGCREDITORREFNO VARCHAR(30),BCLAIMONHOLD INT)

UPDATE CLAIM 
SET BCLAIMONHOLD = 1
OUTPUT INSERTED.* INTO @MYVAR
WHERE SORIGCREDITORREFNO IN (SELECT SORIGCREDITORREFNO FROM @TEMP_tbl) 

SELECT * FROM  @MYVAR  
-- want to look at my updates
  

消息213,级别16,状态1,行16插入错误:列名称或   提供的值的数量与表定义不匹配。

1 个答案:

答案 0 :(得分:1)

您需要将*替换为字段名称

UPDATE CLAIM 
SET BCLAIMONHOLD = 1
OUTPUT INSERTED.SORIGCREDITORREFNO , INSERTED.BCLAIMONHOLD INTO @MYVAR
WHERE SORIGCREDITORREFNO IN (SELECT SORIGCREDITORREFNO FROM @TEMP_tbl)

指定*时,表示CLAIM表中的所有字段,与@MYVAR变量中的字段不匹配