長時間的測試和研究之後,我真的認爲這是嗅探問題的參數,因爲我也做了以下測試:
執行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)讀取擴展存儲過程已被棄用,應該避免如果可能。 –