Sql server SQL用户定义函数,以表变量作为输入&;返回值

Sql server SQL用户定义函数,以表变量作为输入&;返回值,sql-server,tsql,user-defined-functions,table-variable,Sql Server,Tsql,User Defined Functions,Table Variable,我有一个用户定义的表值函数,它的输入类型是表变量,返回类型是另一个表变量 但是,当我尝试执行该函数时,它抛出错误“必须声明标量变量”。对函数的调用似乎不知道表变量@myTable,即使它是在前一行声明的 我想我快疯了。。。你能看出我做错了什么吗 -- Create the table type CREATE TYPE [dbo].[TableType] AS TABLE( [z] [varchar](50) NULL ) GO -- Create the user defined f

我有一个用户定义的表值函数,它的输入类型是表变量,返回类型是另一个表变量

但是,当我尝试执行该函数时,它抛出错误“必须声明标量变量”。对函数的调用似乎不知道表变量@myTable,即使它是在前一行声明的

我想我快疯了。。。你能看出我做错了什么吗

-- Create the table type
CREATE TYPE [dbo].[TableType] AS TABLE(
    [z] [varchar](50) NULL
)
GO


-- Create the user defined function
USE [databaseName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[boxPackingSort3](@TableName TableType READONLY)
RETURNS @ReturnTable TABLE(
    [partno] [varchar](50) NULL,
    [Q] [int] NULL,
    [L] [int] NULL,
    [W] [int] NULL,
    [H] [int] NULL,
    [Id] [int] NULL
)
AS
BEGIN
    INSERT INTO @ReturnTable SELECT 'xxx', '1' , '1', '1', '1', '1' 
    RETURN
END


-- Call the user defined function
DECLARE @myTable TableType
INSERT INTO @myTable(z) VALUES('aaa')
select * from  dbo.[boxPackingSort3](@myTable)



Msg 137, Level 16, State 1, Line 5
Must declare the scalar variable "@myTable".

适合我,只需将
LocationName
更改为
z
就可以了-我刚刚在我原来的帖子中修复了
LocationName
。我刚刚试着让一位同事运行这个SQL,他收到了相同的错误消息。我们正在运行SQL 2008 R2,这会有任何影响吗?我看不出它为什么不工作。除非您单独运行
select*from dbo.[boxPackingSort3](@myTable)
,否则我肯定您做得不对?经过大量测试,结果表明问题是由于数据库可比性设置为SQL Server 2000(80)。当我将其更改为SQLServer2005(80)时,查询就开始工作了。我想是时候开始阅读SQL升级顾问了……@Brain101,你们能不能把问题作为答案而不是评论发表。这将帮助其他人。