0
您好我開發中,我宣佈所謂@TEMP_TABLE的表變量的存儲過程,但此行表變量存儲Procudure
SET @SQL1 = 'UPDATE PO_STAGE set PO_STAGE.ISVALID = ''N''
FROM ERP_ADMIN.'[email protected]_TABLE+' PO_STAGE, @TEMP_TABLE TMP
where PO_STAGE.ERP_PO_ID = TMP.ERP_POID'
exec (@SQL1)
我得到「必須聲明表變量‘@TEMP_TABLE’ 「。錯誤。 請在這方面幫助我。下面是存儲過程的代碼。
CREATE PROCEDURE [ERP_ADMIN].[VALIDATE_PURCHASE_ORDER]
@STAGE_TABLE nvarchar(50)
-- @errorProperty nvarchar(50) output,
-- @errorValue nvarchar(120) output
AS
BEGIN
SET NOCOUNT ON;
DECLARE @rule INTEGER
DECLARE @approvalcheckingrecord VARCHAR(200)
DECLARE @APP_VALIDFROMDATE DATETIME,
@APP_VALIDTODATE DATETIME,
@numUpdated INTEGER,
@numInserted INTEGER,
@systodate VARCHAR(160),
@SQL1 [nvarchar](1200),
@SQL2 [nvarchar](1200),
@SOUCOL [nvarchar](200)
-- SELECT @systodate = CONVERT(VARCHAR(23), ERP_ADMIN.GETCURRENTDATE(), 110) +' '+ CONVERT(VARCHAR(23), ERP_ADMIN.GETCURRENTDATE(), 108)
--SELECT @systodate = CONVERT(VARCHAR(23), GETDATE(), 110) +' '+ CONVERT(VARCHAR(23), GETDATE(), 108)
SET @SQL1 = ''
SET @SQL1 = 'SELECT ERP_SOURCE_COLUMN
FROM [ERP_ADMIN].[ERP_STAGE_PROP_MAPPING] where [ERP_SOURCE_TABLE] = '''[email protected]_TABLE+''' and [ERP_REPORT_COLOMNS] = ''Y'''
-- PRINT @SQL1
SET @SQL2 = 'DECLARE rpt_cursor CURSOR GLOBAL FOR ' + @SQL1
exec (@SQL2)
DECLARE @SOURCE_COLOMN nvarchar(80)
SET @SOUCOL = ''
OPEN rpt_cursor
WHILE (0 = 0)
--begin of while
BEGIN
FETCH NEXT FROM rpt_cursor INTO @SOURCE_COLOMN
IF (@@FETCH_STATUS = -1)
BREAK
IF (@SOUCOL = '')
SET @SOUCOL = 'convert(nvarchar(255),ISNULL('[email protected]_COLOMN+',''''))+'',''+'
ELSE
SET @SOUCOL = @SOUCOL + 'convert(nvarchar(255),ISNULL('[email protected]_COLOMN+',''''))+'',''+'
END
CLOSE rpt_cursor
DEALLOCATE rpt_cursor
PRINT @SOUCOL
DECLARE @TEMP_TABLE TABLE (
ERP_POID nvarchar(50),
ERRORCD nvarchar(50),
ERRORMSG nvarchar(120)
)
SET @SQL1 = ''
SET @SQL1 = 'SELECT ERP_SOURCE_COLUMN
FROM [ERP_ADMIN].[ERP_STAGE_PROP_MAPPING] where [ERP_SOURCE_TABLE] = '''[email protected]_TABLE+''' and [ERP_REPORT_COLOMNS] = ''Y'''
SET @SQL1 = 'SELECT [ERP_SOURCE_TABLE]
,[ERP_SOURCE_COLUMN]
,[ERP_MANDATORY_CHECK]
,[ERP_DATA_CHECK]
,[ERP_ERROR_PROPERTY1]
,[ERP_ERROR_VALUE1]
,[ERP_ERROR_PROPERTY2]
,[ERP_ERROR_VALUE2]
FROM [ERP_ADMIN].[ERP_STAGE_PROP_MAPPING] where [ERP_SOURCE_TABLE] = '''[email protected]_TABLE+''' and ([ERP_MANDATORY_CHECK] IN (''K'',''Y'') or [ERP_DATA_CHECK] IN (''D'',''N''))'
PRINT @SQL1
SET @SQL2 = 'DECLARE stage_cursor CURSOR GLOBAL FOR ' + @SQL1
/** DECLARE stage_cursor CURSOR LOCAL FOR
/****** Script for SelectTopNRows command from SSMS ******/
SELECT [ERP_SOURCE_TABLE]
,[ERP_SOURCE_COLUMN]
,[ERP_MANDATORY_CHECK]
,[ERP_DATA_CHECK]
,[ERP_ERROR_PROPERTY1]
,[ERP_ERROR_VALUE1]
,[ERP_ERROR_PROPERTY2]
,[ERP_ERROR_VALUE2]
FROM [ERP_ADMIN].[ERP_STAGE_PROP_MAPPING] where [ERP_SOURCE_TABLE] = '[email protected]_TABLE+' and ([ERP_MANDATORY_CHECK] IN ('K','Y') or [ERP_DATA_CHECK] IN ('D','N')) **/
exec(@SQL2)
DECLARE @CUR_SOURCE_TABLE [nvarchar](120),
@CUR_SOURCE_COLUMN [nvarchar](120),
@CUR_MANDATORY_CHECK [nvarchar](20),
@CUR_DATA_CHECK [nvarchar](20),
@CUR_ERROR_PROPERTY1 [nvarchar](50),
@CUR_ERROR_VALUE1 [nvarchar](120),
@CUR_ERROR_PROPERTY2 [nvarchar](50),
@CUR_ERROR_VALUE2 [nvarchar](120)
OPEN stage_cursor
WHILE (0 = 0)
--begin of while
BEGIN
FETCH NEXT FROM stage_cursor INTO
@CUR_SOURCE_TABLE,
@CUR_SOURCE_COLUMN,
@CUR_MANDATORY_CHECK,
@CUR_DATA_CHECK,
@CUR_ERROR_PROPERTY1,
@CUR_ERROR_VALUE1,
@CUR_ERROR_PROPERTY2,
@CUR_ERROR_VALUE2
IF (@@FETCH_STATUS = -1)
BREAK
SET @SQL1 = ''
SET @SQL2 = ''
PRINT @CUR_SOURCE_COLUMN
-- IF(@CUR_SOURCE_COLUMN = 'ERP_PO_DOCNUMBER')
IF (@CUR_MANDATORY_CHECK = 'Y' OR @CUR_MANDATORY_CHECK = 'K')
BEGIN
-- SET @SQL1 = 'SELECT ''aaa'' as column1, ERP_PO_DOCNUMBER as column2
-- from PURCHASE_ORDER_STAGE where '+ @CUR_SOURCE_COLUMN +' IS NULL'
SET @SQL1 = 'SELECT ERP_PO_ID, '''[email protected]_ERROR_PROPERTY1+''' as column1,'[email protected]+'''|1| ERR_01 '''''[email protected]_ERROR_VALUE1+'''+'' or null in input Worksheet'' as column2
from [ERP_ADMIN].'[email protected]_TABLE+' where '+ @CUR_SOURCE_COLUMN +' IS NULL'
PRINT @SQL1
INSERT INTO @TEMP_TABLE
exec (@SQL1)
END
IF (LTRIM(RTRIM(@CUR_DATA_CHECK)) = 'D')
BEGIN
-- SET @SQL1 = 'SELECT ''aaa'' as column1, ERP_PO_DOCNUMBER as column2
-- from PURCHASE_ORDER_STAGE where '+ @CUR_SOURCE_COLUMN +' IS NULL'
SET @SQL1 = 'SELECT ERP_PO_ID, '''[email protected]_ERROR_PROPERTY2+''' as column1,'[email protected]+'''|1| ERR_01 '''''[email protected]_ERROR_VALUE2+'''+'' in the input Worksheet'' as column2
from [ERP_ADMIN].'[email protected]_TABLE+' where isdate('+ @CUR_SOURCE_COLUMN +') =0'
PRINT @SQL1
INSERT INTO @TEMP_TABLE
exec (@SQL1)
END
IF (LTRIM(RTRIM(@CUR_DATA_CHECK)) = 'N')
BEGIN
PRINT @CUR_SOURCE_COLUMN
SET @SQL1 = 'SELECT ERP_PO_ID, '''[email protected]_ERROR_PROPERTY2+''' as column1,'[email protected]+'''|1| ERR_01 '''''[email protected]_ERROR_VALUE2+'''+'' in the input Worksheet'' as column2
from [ERP_ADMIN].'[email protected]_TABLE+' where isnumeric('+ @CUR_SOURCE_COLUMN +') =0'
PRINT @SQL1
INSERT INTO @TEMP_TABLE
exec (@SQL1)
END
END
CLOSE stage_cursor
DEALLOCATE stage_cursor
SET @SQL1 = ''
SET @SQL1 = 'UPDATE PO_STAGE set PO_STAGE.ISVALID = ''N'' FROM ERP_ADMIN.'[email protected]_TABLE+' PO_STAGE, @TEMP_TABLE TMP where PO_STAGE.ERP_PO_ID = TMP.ERP_POID'
PRINT @SQL1
exec (@SQL1)
/** DECLARE update_stage_cursor CURSOR LOCAL FOR
SELECT ERP_POID FROM @TEMP_TABLE
DECLARE @CURPOID [nvarchar](50)
OPEN update_stage_cursor
WHILE (0 = 0)
--begin of while
BEGIN
FETCH NEXT FROM update_stage_cursor INTO
@CURPOID
IF (@@FETCH_STATUS = -1)
BREAK
END
CLOSE update_stage_cursor
DEALLOCATE update_stage_cursor **/
-- SELECT A.ERP_PO_ID FROM ERP_ADMIN.PURCHASE_ORDER_STAGE A, @TEMP_TABLE B where ERP_PO_ID = B.ERP_POID
SELECT ERRORCD, ERRORMSG FROM @TEMP_TABLE
END
GO
表變量是隻從當前批處理訪問。改用臨時表。 –