這裏是我的存儲過程:存儲過程不返回任何行,但相同的查詢返回正確的數據
CREATE PROC [SPmainReport]
@startDate date = null,
@endDate date = null,
@customerName varchar = null,
AS
SELECT Distinct
VI.Code as CustomerCode, VI.Name as CustomerName, VI.Area as CustomerArea, VI.[Address] as [address], CP.ProductName as ProductName, CP.ProductQuantity as Quantity
from
VendorTrading VT inner join CustomerProducts CP on VT.Id = CP.VendorTradingId inner join VendorInfo VI on VT.VendorId = VI.Id
where
(VT.Tradedate between isnull(@startDate,VT.Tradedate) and isnull(@endDate,VT.Tradedate))
and VI.Name = ISNULL(@customerName, VI.Name)
在執行時不返回任何值,但如果我執行這個查詢:
SELECT Distinct
VI.Code as CustomerCode, VI.Name as CustomerName, VI.Area as CustomerArea, VI.[Address] as [address], CP.ProductName as ProductName, CP.ProductQuantity as Quantity
from
VendorTrading VT inner join CustomerProducts CP on VT.Id = CP.VendorTradingId inner join VendorInfo VI on VT.VendorId = VI.Id
where
(VT.Tradedate between isnull(@startDate,VT.Tradedate) and isnull(@endDate,VT.Tradedate))
and VI.Name = ISNULL('John', VI.Name)
它返回完全需要的數據。我完全困惑它爲什麼會發生。完全沒有區別。我確保腳本在同一個數據庫上運行,並且它也包含完美的數據。這裏是SP執行腳本:
USE [E:\SANDWICH3\ABC\BIN\DEBUG\DATABASE\ABC.MDF]
GO
DECLARE @return_value Int
EXEC @return_value = [dbo].[SPmainReport]
@startDate = '2015-12-25',
@endDate = '2015-12-25',
@customerName = N'John'
SELECT @return_value as 'Return Value'
GO
一個更奇怪的我已經注意到的是,如果我修改該SP和限制條件,只有日期,而不是名字。它工作得很好。 我正在開發SQL Server的Visual Studio 2013界面。不管理工作室使用varchar()
和char()
和相關類型時(如果這非常重要)
http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx(始終將長度分配給變量類型)&http ://blogs.sqlsentry.com/aaronbertrand/bad-habits-attachdbfilename/(爲什麼數據庫名爲'E:\ SANDWICH3 \ ABC \ BIN \ DEBUG \ DATABASE \ ABC.MDF'而不是'ABC'?) –
名稱仍然是ABC,其餘爲目標路徑。正如我所提到的,我使用Visual Studio界面 –