Sql 表值必须声明标量变量

Sql 表值必须声明标量变量,sql,sql-server,stored-procedures,table-valued-parameters,Sql,Sql Server,Stored Procedures,Table Valued Parameters,我有一个接受表值参数的存储过程 下面是代码: ALTER PROCEDURE [dbo].[ConsolidateInspection] @TblConsolidation DTProductCodePO READONLY AS BEGIN BEGIN TRANSACTION DECLARE @CurrentFormNo AS BIGINT = 0 INSERT INTO [InspectionDB].[dbo].[FormHeader]

我有一个接受表值参数的存储过程

下面是代码:

ALTER PROCEDURE [dbo].[ConsolidateInspection]
    @TblConsolidation DTProductCodePO READONLY
AS
BEGIN
    BEGIN TRANSACTION
        DECLARE @CurrentFormNo AS BIGINT = 0

        INSERT INTO [InspectionDB].[dbo].[FormHeader] 
                      (PONumber, POSuffix, [Productcode], [Stratum], [SpecNumber], [Engineer],
                       [ProductManager], [CountryCode], [SupplierCode], [Supplier],
                       [QTY], [EAGTIN], [INGTIN], [OUGTIN], [InspectionType], [InspectorName])
            SELECT 
                @CurrentFormNo = P.FormNo   
            FROM 
                FormHeader P 
            INNER JOIN 
               @TblConsolidation T ON P.PONumber = T.PO 
                                   AND P.POSuffix = T.POSuffix 
                                   AND P.Productcode = T.ProductCode
                                   AND P.CountryCode = T.CountryCode
           ORDER BY 
               PO, P.POSuffix, P.Productcode


        COMMIT TRANSACTION
    END
我正在尝试执行上述存储过程:

exec ConsolidateInspection @TblConsolidation dbo.Temp
dbo.Temp
是具有相同属性的表的名称

我试过了

exec ConsolidateInspection @TblConsolidation Select * from Temp
这是一个错误的说法

必须声明标量变量“@TBLConsolution”


有什么帮助吗?

dbo.Temp
与DTProductCodePO不一样!DTProductCodePO是一种表类型,您应该定义它的一个变量,然后填充它,然后将它作为如下参数使用:

Declare @Tbl DTProductCodePO

Insert into @Tbl(your fields here ...) 
SELECT ...SAME FIELD HERE... from dbo.Temp

exec ConsolidateInspection @Tbl

dbo.Temp
与DTProductCodePO不一样!DTProductCodePO是一种表类型,您应该定义它的一个变量,然后填充它,然后将它作为如下参数使用:

Declare @Tbl DTProductCodePO

Insert into @Tbl(your fields here ...) 
SELECT ...SAME FIELD HERE... from dbo.Temp

exec ConsolidateInspection @Tbl

在调用代码中声明变量(必须是正确的类型!)。在[表值]变量中选择
。仅向存储过程提供变量名。FWIW:要按名称提供参数,a
=
exec MySPROC@a='hello',@b='world'
。但是,请参见上文。没有用。。仍然相同第二条注释说明了出现错误的原因(如果使用
exec ConsolidateInspection@TblConsolidation=dbo.Temp
则会出现不同的错误,而不是“仍然相同”)。第一条注释说明了在这种情况下如何实际调用SP。请参阅链接:
受到限制。语法[相对]定义得很好,就允许的内容而言,如果有时不尴尬的话。投票结束是因为“报告的错误”和“实际/执行的SQL”不断变化。一次解决一个问题。如果SSMS/SQL Server表示未定义变量,则未定义该变量。解决这个问题,然后继续。注意注释(以避免不相关的语法错误)和现有答案等。在调用代码中声明变量(必须是正确的类型!)。在[表值]变量中选择
。仅向存储过程提供变量名。FWIW:要按名称提供参数,a
=
exec MySPROC@a='hello',@b='world'
。但是,请参见上文。没有用。。仍然相同第二条注释说明了出现错误的原因(如果使用
exec ConsolidateInspection@TblConsolidation=dbo.Temp
则会出现不同的错误,而不是“仍然相同”)。第一条注释说明了在这种情况下如何实际调用SP。请参阅链接:
受到限制。语法[相对]定义得很好,就允许的内容而言,如果有时不尴尬的话。投票结束是因为“报告的错误”和“实际/执行的SQL”不断变化。一次解决一个问题。如果SSMS/SQL Server表示未定义变量,则未定义该变量。解决这个问题,然后继续。请注意注释(以避免不相关的语法错误)和现有答案等。我要执行的SP“ConsolidateInspection”没有得到执行。无论如何,我没有使用任何其他表,只是为了赋值和查看其工作方式,我创建了临时表。我需要创建表吗?我不能在我的“ConsolidateInspection”中直接使用TV吗?我的问题是我无法将数据发送到@TBLConsolution您有一个名为DTProductCodePO的表类型。不能将临时模板创建为存储过程参数。您应该创建DTProductCodePO变量,然后填充它,然后将其用作参数。这里的代码有什么问题?“ConsolidateInspection”是我要执行的SP。要执行,我确实从Temp exec ConsolidateInspection@Tbl将@Tbl DTProductCodePO INSERT声明为@Tbl Select*from Temp Select*from Temp exec ConsolidateInspection@Tbl,但它没有执行ConsolidateInspection我要执行的SP“ConsolidateInspection”并没有被执行。不管怎样,我并没有使用任何其他表,它只是用来赋值,看看它是如何工作的,我创建了临时表。我需要创建表吗?我不能在我的“ConsolidateInspection”中直接使用TV吗?我的问题是我无法将数据发送到@TBLConsolution您有一个名为DTProductCodePO的表类型。不能将临时模板创建为存储过程参数。您应该创建DTProductCodePO变量,然后填充它,然后将其用作参数。这里的代码有什么问题?“ConsolidateInspection”是我要执行的SP。为了执行,我确实从Temp exec ConsolidateInspection@Tbl将@Tbl DTProductCodePO INSERT声明为@Tbl Select*from Temp Select*from Temp exec ConsolidateInspection@Tbl,但它没有执行ConsolidateInspection