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
RECEIVABLESTABLE如何定义?我怀疑这是问题所在。 – 2012-08-15 00:30:28
这些前三个参数的表格类型是否正在尝试将它们用作TVP?如果是这样,我不相信你可以从动态SQL引用TVP,它就像这样的表变量 - 对于动态SQL范围不可见。 – 2012-08-15 02:17:56
我使用了用户定义的表格类型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