2012-08-15 230 views
1

我有這個SQL代碼,我正在使用一次動態地插入3個表。當我嘗試運行它,我得到這個消息必須聲明標量變量@RECEIVABLESDATA

消息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 
+0

RECEIVABLESTABLE如何定義?我懷疑這是問題所在。 – 2012-08-15 00:30:28

+0

這些前三個參數的表格類型是否正在嘗試將它們用作TVP?如果是這樣,我不相信你可以從動態SQL引用TVP,它就像這樣的表變量 - 對於動態SQL範圍不可見。 – 2012-08-15 02:17:56

+0

我使用了用戶定義的表格類型USE [PantaRei] GO /****** Object:UserDefinedTableType [dbo]。[ReceivablesTable] Script Date:15-08-2012 18:53:24 **** **/ CREATE TYPE [DBO]。[ReceivablesTable] AS TABLE( \t [寫到FileID] [INT] NULL, \t [SheetType] [nvarchar的](最大)NULL, \t [SellerCompany] [nvarchar的](最大) NULL, ) GO – 2012-08-15 16:54:16

回答

1

嘗試使用臨時表:

SELECT * INTO #t1 FROM @RECEIVABLESDATA; 

    SET @CMD = 

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

    EXECUTE sp_executesql @CMD 

而且here is the other way。檢查它是否適用於您的MS SQL版本:

SET @CMD = 

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

    EXECUTE sp_executesql @CMD, N'@RECEIVABLESDATA RECEIVABLESDATA READONLY', @RECEIVABLESDATA; 
+0

它工作,tks。 – 2012-08-15 19:47:24