长时间的测试和研究之后,我真的认为这是嗅探问题的参数,因为我也做了以下测试:
执行SQL正常查询:7秒。
declare @field_1 int = 1
declare @field_2 NVARCHAR(MAX) = null
declare @field_3 NVARCHAR(MAX) = null
declare @field_4 NVARCHAR(MAX) = null
declare @field_5 NVARCHAR(MAX) = null
declare @field_6 NVARCHAR(MAX) = null
declare @field_7 NVARCHAR(MAX) = null
declare @field_8 DATE = dateadd(month, -1, getdate())
declare @field_9 DATE = getdate()
select * ...
执行TVF这样:7秒
declare @field_1 int = 1
declare @field_2 NVARCHAR(MAX) = null
declare @field_3 NVARCHAR(MAX) = null
declare @field_4 NVARCHAR(MAX) = null
declare @field_5 NVARCHAR(MAX) = null
declare @field_6 NVARCHAR(MAX) = null
declare @field_7 NVARCHAR(MAX) = null
declare @field_8 DATE = dateadd(month, -1, getdate())
declare @field_9 DATE = getdate()
select *
from fn_generar_reporte_cred(@field_1, @field_2, @field_3, @field_4, @field_5,
@field_6, @field_7, @field_8, @field_9)
执行TVF是这样的:1分20秒
select *
from fn_generar_reporte_cred(1, null, null, null, null, null, null, dateadd(month, -1, getdate()), getdate())
执行SP通常:1分20秒
CREATE PROCEDURE [dbo].[pa_reporte_cred](
@field_1 INT,
@field_2 NVARCHAR(MAX),
@field_3 NVARCHAR(MAX),
@field_4 NVARCHAR(MAX),
@field_5 NVARCHAR(MAX),
@field_6 NVARCHAR(MAX),
@field_7 NVARCHAR(MAX),
@field_8 DATE,
@field_9 DATE
) AS
BEGIN
SELECT * ...
Execute SP normall y(内部改变):7秒
CREATE PROCEDURE [dbo].[pa_reporte_cred_ss](
@field_1_ss INT,
@field_2_ss NVARCHAR(MAX),
@field_3_ss NVARCHAR(MAX),
@field_4_ss NVARCHAR(MAX),
@field_5_ss NVARCHAR(MAX),
@field_6_ss NVARCHAR(MAX),
@field_7_ss NVARCHAR(MAX),
@field_8_ss DATE,
@field_9_ss DATE
) AS
BEGIN
declare @field_1 int
declare @field_2 NVARCHAR(MAX)
declare @field_3 NVARCHAR(MAX)
declare @field_4 NVARCHAR(MAX)
declare @field_5 NVARCHAR(MAX)
declare @field_6 NVARCHAR(MAX)
declare @field_7 NVARCHAR(MAX)
declare @field_8 DATE
declare @field_9 DATE
SELECT @field_1 = @field_1_ss, @field_2 = @field_2_ss, @field_3 = @field_3_ss,
@field_4 = @field_4_ss, @field_5 = @field_5_ss, @field_6 = @field_6_ss,
@field_7 = @field_7_ss, @field_8 = @field_8_ss, @field_9 = @field_9_ss
SELECT * ...
谢谢大家的帮助!
请问您的2存储过程的查询到你的问题? –
嗨@JohnOdom,据我解释,只有一个存储过程。我无法发布SQL查询,因为企业策略。 –
嗯...你尝试过使用CLR集成吗?我刚刚从[这个问题](http://stackoverflow.com/questions/4603396/what-is-extended-stored-procedure-in-ms-sql-server)读取扩展存储过程已被弃用,应该避免如果可能。 –