2015-09-22 26 views
0

我試圖在SQL Server Management Studio中創建一個存儲過程,我可以在屬於某個具有特定狀態的供應商的表中找到任何發票。例如,我從我的VB應用程序供應商123456,我想要查找他們是否有任何發票在我的InvoiceTable狀態= B並返回一個true或false值。這是我到目前爲止已經嘗試:在存儲過程中返回True或False值

ALTER PROCEDURE [dbo].[CheckStatus] 

@VendorNumber char  
AS 
BEGIN 

Select distinct 
CASE WHEN OrderStatus = 'B' and VendorNumber = @VendorNumber then 'true' else 'False' END as Status 
from InvoiceTable 

END 

現在,它總是返回一個奇異的「假」值,不管orderstatus = B和vendornumber = @vendornumber與否。

我不知道這是可能的,或者我甚至在右側頁面

+1

你的曲嘗試ery爲表中的所有記錄建立「真」或「假」列表,然後「明確」爲「真」或「假」。顯然'錯誤'恰好在第一行,你的應用程序從不讀第二行。 – GSerg

+0

我會將您的案例條款移到where子句中,從中選擇計數,如果結果> 0,那麼您知道您有發票。你的不同可能總是返回2行:'True'和'False',它可能恰好是假的第一個 – mafafu

+0

@Madafu現在它只返回一堆行,每個發票一個,但他們總是全都是假的。這就是爲什麼我有獨特的,希望它會返回一個'真'和'假'至少如果它返回True和False我會知道它是擊中所有不同的發票,但它不是。 –

回答

3

你可以用這個

IF EXISTS(SELECT * 
    FROM InvoiceTable 
    WHERE OrderStatus = 'B' and VendorNumber = @VendorNumber 
    ) 
    SELECT 'True' 
ELSE 
    SELECT 'False' 
0

我想找到他們是否有在我InvoiceTable任何發票,其中 狀態= B,並返回一個true或false值

IF (SELECT COUNT(*) 
    FROM InvoiceTable 
    WHERE OrderStatus = 'B' and VendorNumber = @VendorNumber 
    ) > 0 
    SELECT 'True' 
ELSE 
    SELECT 'False' 
+1

請不要在只需[存在](https://msdn.microsoft.com/en-us/library/ms188336%28v=sql.120%29.aspx)的地方使用'count'。 – GSerg