1

一度に3つのテーブルを動的に挿入するために使用しているこのSQLコードがあります。実行しようとすると、このメッセージが表示されます

メッセージ 137、レベル 16、状態 1、手順 InsertData、行 28 スカラー変数「@RECEIVABLESDATA」を宣言する必要があります。

何か案は?

USE [PantaRei]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[InsertData] 
@RECEIVABLESDATA RECEIVABLESTABLE READONLY,
@DILUTIONSDATA DILUTIONSTABLE READONLY,
@ACCOUNTABLESDATA ACCOUNTABLESTABLE READONLY,
@TABLE1 VARCHAR(MAX),
@TABLE2 VARCHAR(MAX),
@TABLE3 VARCHAR(MAX)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    DECLARE @CMD nvarchar(345)

    SET NOCOUNT ON;

    SET @TABLE1 = RTRIM(@TABLE1)
    SET @TABLE2 = RTRIM(@TABLE2)
    SET @TABLE3 = RTRIM(@TABLE3)

    SET @CMD =

        'INSERT INTO ' + QUOTENAME(@TABLE1) +
        'SELECT * FROM [DBO].' + QUOTENAME(@RECEIVABLESDATA)

    EXECUTE sp_executesql @CMD

    SET @CMD =

        'INSERT INTO ' + QUOTENAME(@TABLE2) +
        'SELECT * FROM [DBO].' + QUOTENAME(@DILUTIONSDATA)

    EXECUTE sp_executesql @CMD

    SET @CMD =

        'INSERT INTO '+ QUOTENAME(@TABLE3) + 
        'SELECT * FROM [DBO].' + QUOTENAME(@ACCOUNTABLESDATA)
END
4

1 に答える 1

1

一時テーブルを使用してみてください:

  SELECT * INTO #t1 FROM @RECEIVABLESDATA;

  SET @CMD =

        'INSERT INTO ' + QUOTENAME(@TABLE1) +
        'SELECT * FROM #t1';

    EXECUTE sp_executesql @CMD

また、ここに別の方法があります。MS SQL バージョンで動作するかどうかを確認します。

SET @CMD =

        'INSERT INTO ' + QUOTENAME(@TABLE1) +
        'SELECT * FROM @RECEIVABLESDATA';

    EXECUTE sp_executesql @CMD, N'@RECEIVABLESDATA RECEIVABLESDATA READONLY', @RECEIVABLESDATA;
于 2012-08-15T08:33:37.787 に答える