我執行這樣一個過程:SQL:過程沒有得到一個日期空
EXEC myProcedure @name = 'Smith', @dateDeleted = NULL
我需要所有沒有被刪除的日期史密斯。
這是程序:
CREATE PROCEDURE [dbo].[myProcedure]
@name VARCHAR(8000) = NULL
,@dateDeleted VARCHAR(8000) = NULL
AS
BEGIN
SET NOCOUNT ON;
WITH t
(name
,dateDeleted
)
AS
(
SELECT DISTINCT
name,dateDeleted FROM mytable
WHERE
(@name IS NULL OR @name = name)
AND (@dateDeleted IS NULL OR CONVERT(DATETIME, @dateDeleted, 102) = dateDeleted)
)
執行後我把所有的史密斯,但它不支付任何注意dateDeleted = NULL。我GE所有的史密斯不管他們是否有刪除日期
我該如何解決這個問題?
感謝
@name CHAR (1)=只允許你指定'S'而不是'Smith'.... VARCHAR(8000)的日期?你的數據類型看起來不對。 – 2013-02-21 13:02:41
你沒有檢查表格列: AND(@dateDeleted IS NULL ...應該是 AND(dateDeleted IS NULL ... – jim31415 2013-02-21 13:05:43
[不良習慣踢:選擇錯誤的數據類型](http:// sqlblog .com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx) - 你應該總是使用最合適的數據類型 - 所以不要使用'VARCHAR(8000)'作爲你的'@ dateDeleted' - 使用'DATE'或'DATETIME'(如果你使用SQL Server 2008的話''DATETIME2')!! – 2013-02-21 13:22:26