【发布时间】:2015-09-16 09:24:57
【问题描述】:
我刚刚创建了以下存储过程
CREATE PROCEDURE [dbo].[FindIncomplete_Products]
@type nvarchar(250),
@category nvarchar(250),
@country nvarchar(250),
@subsidary nvarchar(250),
@date datetime
AS
Begin
select [dbo].[AB_Product].[ProductID],
[dbo].[AB_Product].[ProductTitleEn],
[dbo].[AB_Product].[ProductTitleAr],
[dbo].[AB_Product].[Status],
[dbo].[AB_ProductType].[ProductTypeNameEn],
[dbo].[AB_ProductType].[ProductTypeNameAr],
[dbo].[AB_ProductTypeCategory].[ProductCategoryNameEn],
[dbo].[AB_ProductTypeCategory].[ProductCategoryNameAr],
[dbo].[AB_Subsidary].[SubsidaryNameEn],
[dbo].[AB_Subsidary].[SubsidaryNameAr],
[dbo].[AB_Subsidary].[Country]
from
[dbo].[AB_Product]
inner join
[dbo].[AB_ProductType] on [dbo].[AB_ProductType].[ProductTypeID] = [dbo].[AB_Product].[ProductTypeID]
inner join
[dbo].[AB_ProductTypeCategory] on [dbo].[AB_ProductTypeCategory].[ProductCategoryID] = [dbo].[AB_Product].[ProductCategoryID]
inner join
[dbo].[AB_Subsidary] on [dbo].[AB_Subsidary].[SubsidaryID] = [dbo].[AB_Product].[Subsidary_ID]
WHERE
(@type IS NULL OR [dbo].[AB_Product].[ProductTypeID] LIKE '%' + @type + '%')
AND (@category IS NULL OR [dbo].[AB_Product].[ProductCategoryID] LIKE '%' + @category + '%')
AND (@country IS NULL OR [dbo].[AB_Subsidary].[Country] LIKE '%' + @country + '%')
AND (@subsidary IS NULL OR [dbo].[AB_Product].[Subsidary_ID] LIKE '%' + @subsidary + '%')
AND (@date IS NULL OR [dbo].[AB_Product].[CreatedDate] = @date)
End
我的数据库字段是日期时间字段,即[dbo].[AB_Product].[CreatedDate],当我访问此存储过程时,我以这种格式mm-dd-yyyy 传递了数据参数的值。
因为这是在寻找创建日期字段的确切值,即AND ([dbo].[AB_Product].[CreatedDate] = @date),所以我无法得到所有类似的结果。
例如,如果我想搜索创建日期为 2015-08-27 的所有产品,一旦我将其作为参数值传递,我无法获得创建日期为 2015-08-27 的所有结果,只有我可以获得创建日期的结果像这样2015-08-27 00:00:00.000。我错过了诸如创建日期值有2015-08-27 13:03:50.647
【问题讨论】:
-
如果您使用过 sql server 2008 或更高版本,请在存储过程中使用
date数据类型而不是datetime传递 @date 参数。
标签: sql-server date datetime stored-procedures