是否有可能允許傳遞可選參數而不是varchar(即DateTime,decimal ..)的搜索函數?SEARCH中的選項參數CFQL方法不是類型varchar
我需要搜索日期範圍內的行。用戶應該能夠搜索從一個日期,或者直到一個日期,甚至在一個FROM-TO範圍內。
我的方法是用Date參數創建一個SEARCH方法。這些在CFE中正確轉換爲DateTime對象,但我無法傳遞空值。
我設法創建了一個帶有未選中部分的SEARCH方法,但是這些部分在函數體中不會獲得optionnal。
我怎樣才能從日期和日期參數設置爲可選?
CFQL體是產生
SEARCH(string amount, string fromDate, string toDate, string otherEntityId, date date) WHERE [$Entity::Date$ >= CAST(@fromDate AS DATE)] AND [$Entity::Date$ <= CAST(@toDate AS DATE)] AND OtherEntity.OtherEntityId = @otherEntityId AND Amount = @amount and date = @date
身體過程如下。請注意,不是自選
CREATE PROCEDURE [Schema].[Entity_NameOfProcedure]
(
@amount [nvarchar] (256) = NULL,
@fromDate [nvarchar] (256) = NULL,
@toDate [nvarchar] (256) = NULL,
@OtherEntityId [nvarchar] (256) = NULL,
@date [date] = NULL,
@_orderBy0 [nvarchar] (64) = NULL,
@_orderByDirection0 [bit] = 0
)
AS
SET NOCOUNT ON
DECLARE @sql nvarchar(max), @paramlist nvarchar(max)
SELECT @sql=
'SELECT DISTINCT * /*on purpose for stackoverflow */
FROM [Schema].[Entity]
LEFT OUTER JOIN [Schema].[OtherEntity] ON ([Schema].[Entity].[Entity_OtherEntity_OtherEntityId] = [Schema].[OtherEntity].[OtherEntity_OtherEntityId])
WHERE (([Entity].[Entity_Date] >= CAST(@fromDate AS DATE) AND ([Entity].[Entity_Date] <= CAST(@toDate AS DATE) AND ((1 = 1) AND ((1 = 1) AND (([Schema].[OtherEntity].[OtherEntity_NumberInt] LIKE ''6%'') AND (1 = 1)))))) AND (1 = 1))'
SELECT @paramlist = '@amount nvarchar (256),
@fromDate nvarchar (256),
@toDate nvarchar (256),
@otherEntityId nvarchar (256),
@date date,
@_orderBy0 nvarchar (64),
@_orderByDirection0 bit'
IF @amount IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[Entity].[Entity_amount] = @amount))'
IF @otherEntityId IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[OtherEntity].[OtherEntity_OtherEntityId] = @OtherEntityId))'
IF @date IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[Entity].[Entity_Date] = @date))'
EXEC sp_executesql @sql, @paramlist,
@amount,
@fromDate,
@toDate,
@OtherEntityId,
@date,
@_orderBy0,
@_orderByDirection0
RETURN
GO
謝謝您的回答
哦,我不知道這個默認的參數價值的東西。感謝這個偉大的答案。 –