2011-04-04 203 views
1

我有一條SQL語句,afaik正確,但來自SQL服務器的響應不正確。我已經調試過這個問題,發現如果我執行沒有包裝存儲過程的SQL語句,我會得到不同的結果。我所做的是替換變量值與實際值LINQ SQL語句返回錯誤結果

的Linq生成的代碼:

exec sp_executesql N'SELECT [t0].[RoomId], [t0].[Title], [t0].[Detail], [t0].[ThumbnailPath], [t0].[PageId], [t0].[TypeId], [t0].[LocationId], [t0].[TimeStamp], [t0].[DeleteStamp] 
FROM [dbo].[Room] AS [t0] 
INNER JOIN [dbo].[RoomType] AS [t1] ON [t1].[RoomTypeId] = [t0].[TypeId] 
WHERE ([t1].[Sleeps] >= @p0) AND ([t0].[DeleteStamp] IS NULL) AND (((
    SELECT COUNT(*) 
    FROM [dbo].[Booking] AS [t2] 
    INNER JOIN [dbo].[Order] AS [t3] ON [t3].[OrderId] = [t2].[OrderId] 
    WHERE ([t2].[StartStamp] <= @p1) 
    AND ([t2].[EndStamp] >= @p2) 
    AND (([t3].[Status] = @p3) 
     OR ([t3].[Status] = @p4) 
     OR (([t3].[Status] = @p5) AND ([t3].[CreatedStamp] > @p6))) 
     AND ([t2].[RoomId] = [t0].[RoomId]) 
    )) = @p7) 


    ',N'@p0 int,@p1 datetime,@p2 datetime,@p3 int,@p4 int,@p5 int,@p6 datetime,@p7 int', 
    @p0=1,@p1='2011-04-05 00:00:00',@p2='2011-04-04 00:00:00',@p3=3,@p4=5,@p5=0,@p6='2011-04-04 12:36:09.490',@p7=0 

沒有SP

SELECT [t0].[RoomId], [t0].[Title], [t0].[Detail], [t0].[ThumbnailPath], [t0].[PageId], [t0].[TypeId], [t0].[LocationId], [t0].[TimeStamp], [t0].[DeleteStamp] 
FROM [dbo].[Room] AS [t0] 
INNER JOIN [dbo].[RoomType] AS [t1] ON [t1].[RoomTypeId] = [t0].[TypeId] 
WHERE ([t1].[Sleeps] >= 1) AND ([t0].[DeleteStamp] IS NULL) AND (((
    SELECT COUNT(*) 
    FROM [dbo].[Booking] AS [t2] 
    INNER JOIN [dbo].[Order] AS [t3] ON [t3].[OrderId] = [t2].[OrderId] 
    WHERE ([t2].[StartStamp] <= '2011-04-05 00:00:00') 
    AND ([t2].[EndStamp] >= '2011-04-04 00:00:00') 
    AND (([t3].[Status] = 3) 
     OR ([t3].[Status] = 4) 
     OR (([t3].[Status] = 5) AND ([t3].[CreatedStamp] > '2011-04-04 12:36:09.490'))) 
     AND ([t2].[RoomId] = [t0].[RoomId]) 
    )) = 0) 

第一個結果集返回1行,其中作爲第二返回我21!

任何人都可以發現它的差異,因爲它使我瘋狂。

+0

你爲什麼要用LINQ查詢生成的SQL代碼?向我們展示LINQ查詢,也許我們可以找到它的錯誤。 – tster 2011-04-04 12:37:12

+0

因爲我是從底層開始而不是頂層 – 2011-04-04 13:52:49

回答

1

那麼已經取代了它,一個區別是@p5=0當您在其他[t3].[Status] = 5

+0

非常感謝 – 2011-04-04 13:39:02

2

您在替換變量時發生了錯誤!
您提供4個取代P4時,你應該用5和p5與5而不是0

+0

非常感謝 – 2011-04-04 13:38:42