Maideen Abdul Kader Ответов: 1

Как обновить временную таблицу из другой таблицы?


Привет
У меня есть проблема в столбце таблицы update @temp из другого значения столбца таблицы.
После запуска хранимой процедуры ниже приведена ошибка

"Msg 137, Уровень 16, состояние 1, процедура usp_Report_Statement, строка 43 [строка запуска пакета 7] должна объявить скалярную переменную "@Statement".

Пожалуйста, посоветуйте мне
Заранее спасибо
Мейден

Что я уже пробовал:

GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[usp_Report_Statement]
	@Action VARCHAR(50)=NULL,@sid varchar(25) = NULL,@nric varchar(30) = NULL,@NAME VARCHAR(100) NULL
AS
BEGIN

SET NOCOUNT ON;
   DECLARE @Statement TABLE
    (
		[id] [bigint] IDENTITY(1,1) NOT NULL,
		[RCNO] VARCHAR(10) NULL,
		[RCDATE] DATE NULL,
		[SID] [varchar](25) NULL,
		[NAME] [varchar](50) NULL,
		[NRIC] [varchar](25) NULL,
		[COURSECODE] [varchar](20) NULL,
		[COURSEFEEORI] [varchar](10) NULL,
		[AMOUNT] NUMERIC (18,2) NULL,
		[MODE] VARCHAR(20) NULL,
		[RCVDFOR] VARCHAR(50) NULL,
		[CHQAMT] NUMERIC(18,2) NULL,
		[STATUS] VARCHAR(15) NULL,
		[LOCATION] VARCHAR(10) NULL,
		[TAGID] VARCHAR(5) NULL,
		[INTAKEM] VARCHAR(25) NULL,
		[INTAKEY] VARCHAR(5) NULL

    )
		INSERT INTO @Statement (RCNO,RCDATE,SID,NAME,COURSECODE,AMOUNT,RCVDFOR,STATUS,LOCATION,TAGID) 
		SELECT RCNO,RCDATE,SID,NAME,COURSECODE,AMOUNT,RCVDFOR,STATUS,LOCATION,'A'
		FROM [dbo].[US_ReceiptDetails] where [sid]=@sid AND [NAME] = @NAME 

		INSERT INTO @Statement (RCNO,RCDATE,SID,NAME,COURSECODE,AMOUNT,RCVDFOR,STATUS,LOCATION,TAGID) 
		SELECT RCNO,RCDATE,SID,NAME,COURSECODE,AMOUNT,RCVDFOR,STATUS,LOCATION,'A'
		FROM [dbo].[US_RefundDetails] where [sid]=@sid AND [NAME] = @NAME

		UPDATE @Statement SET INTAKEM = A.INTAKEM, INTAKEY = A.INTAKEY FROM [dbo].[AD_StudentRecord] A
		WHERE @Statement.SID = A.SID

		SELECT * FROM @Statement
	END

1 Ответов

Рейтинг:
9

CHill60

Вы получаете ошибку на линии

UPDATE @Statement SET INTAKEM = A.INTAKEM, INTAKEY = A.INTAKEY FROM [dbo].[AD_StudentRecord] A
		WHERE @Statement.SID = A.SID

Если вы хотите обновить таблицу (фактическую таблицу, переменную таблицы или временную таблицу) значениями из одной или нескольких других таблиц, то вы должны JOIN например, таблицы.
UPDATE s SET INTAKEM = A.INTAKEM, INTAKEY = A.INTAKEY FROM [dbo].[AD_StudentRecord] A
INNER JOIN @Statement s ON s.SID = A.SID
Обратите внимание, что я дал @Statреклама в ALIAS (s) - насколько я знаю, это необходимо при обновлении через соединение (но я рад быть исправленным, если я ошибаюсь)