Sql server SQL Server 2012:当我使用参数调用其中的函数时,该过程需要很长时间才能执行,但如果传递原始值,则不会执行

Sql server SQL Server 2012:当我使用参数调用其中的函数时,该过程需要很长时间才能执行,但如果传递原始值,则不会执行,sql-server,sql-server-2012,table-functions,Sql Server,Sql Server 2012,Table Functions,我想知道你们中是否有人能帮我想出主意。你看,我正在调优一个存储过程,称它为proc1,它在内部调用一个表函数。该过程有一个表输入参数idk why,但它是这样构建的,然后执行表函数: 调用前端正在执行的过程: declare @p3 dbo.tblType insert into @p3 values( 11 , 1 , 2 , 5 , 0 , 0 , 0 , 0 , 0 , 'true', 'test') exec sp_executesql N'proc1 @tblSearch',N'

我想知道你们中是否有人能帮我想出主意。你看,我正在调优一个存储过程,称它为proc1,它在内部调用一个表函数。该过程有一个表输入参数idk why,但它是这样构建的,然后执行表函数:

调用前端正在执行的过程:

declare @p3 dbo.tblType

insert into @p3 
values( 11 , 1 , 2 , 5 , 0 , 0 , 0 , 0 , 0 , 'true', 'test')

exec sp_executesql N'proc1 @tblSearch',N'@tblSearch [dbo].[tblType] READONLY',@tblSearch=@p3
调用过程中的table函数

INSERT INTO #TempTable 
    SELECT * 
    FROM Func1(@Param1, @Param2,@Param3)
令人毛骨悚然的是,我调整了table函数以减少执行的时间,但是,它所执行的过程大致相同。然后我试图找出问题并简化问题。最后,我将表函数的原始执行与值放在一起。。它是有效的。如果这个过程得到这个结果,它会在1秒内执行,但是如果我用变量改变它,它需要8分钟。我检查并验证了好几次,我绑定的值是否与我放置的原始值相同

光速执行:

SELECT * 
FROM [dbo].[Func1] (11,1,2,5,0,0,0,0,0,0) 
ORDER BY 1
缓慢执行:

SELECT *  
FROM [dbo].[Func1] (@IDa, @IDb, @OtherActionId, @Idc, @IDd, @IDe, @IDf, @IDg, @IDh, @IDi) 
ORDER BY 1
这个问题快把我逼疯了,简直是疯了。为什么同一个电话的通话时间如此不同??在一个例子中,我输入了值,我发誓我验证了输入参数,我在执行之前输入了下面的语句,所以我知道它们:

SELECT @IDa '@IDa',@IDb '@IDb',@OtherActionId '@OtherActionId',@Idc '@Idc',@IDd '@IDd',@IDe '@IDe',@IDf '@IDf',@IDg '@IDg',@IDh '@IDh',@IDi '@IDi'
有什么想法吗?可能与sp_executesql有关?有没有人有过类似的问题


提前感谢并致以亲切的问候

Google参数嗅探还可以选中此选项,尝试重新编译:插入到可诱惑的SELECT*FROM中Func1@Param1,@Param2,@Param3选项重新编译