2012-06-18 88 views
1

我在這一個瘋了。我有以下SP:SQL EXISTS的問題

ALTER PROCEDURE [BankImport].[spBI_getIsBatchUnique] 
    @batchName varchar = 500 
AS 
BEGIN 
    SET NOCOUNT ON; 
    IF (EXISTS (SELECT 1 FROM [ACN_Main].[BankImport].[tblBI_Jobs] 
      WHERE [batchNumber] = @batchName)) 
     BEGIN 
      SELECT 1 
     END 
    ELSE 
     BEGIN 
      SELECT 0 
     END  
    END 
GO 

但無論請求是什麼,我總是回來0!

我試圖用幾種方式修改它,但沒有成功! 我需要做的是檢查是否有該批號的記錄並返回true,否則返回false。

任何提示?

感謝

回答

8

你輸入參數看起來有點滑稽

@batchName varchar = 500 

如果它一直這樣?

@batchName varchar(500) 

即設置varchar數據類型的長度,你當前如何擁有它,500是爲batchName PARAM的默認值。

+3

+1目前,它給出了一個'VARCHAR(1)'默認的'500'值自動截斷爲'*'。這不可能是預期的效果! –

+0

你在哪裏吧!!!!多麼想念!我失去了兩個小時,用不同的方式重寫了10次查詢! 謝謝! – MaiOM

+0

@MaiOM始終使用長度定義char/varchar/nchar/nvarchar。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –

1

我想是因爲你比較batchNumber和batchName,嘗試

EXISTS (SELECT 1 FROM [ACN_Main].[BankImport].[tblBI_Jobs] 
     WHERE [batchName] = @batchName) 
+0

這只是命名錯誤匹配。我解決了它,檢查@ mouters的答案。不管怎麼說,還是要謝謝你 – MaiOM