2011-06-14 112 views
2

我有SQL語句:查詢不工作

SELECT  ASIN, Date, DateSoldActualized, FNSKU, ItemName, MaxShipmentDateAllSkus, MaxShipmentDateThisSKU, MerchantID, MerchantSKU, SoldIn30Days, TotalQty 
FROM   AmazonSKUs 
WHERE  (MerchantSKU LIKE @MerchantSKU) 

我有20,000條記錄的大型數據庫。這些記錄中有72個有以MEA_開頭的MerchantSKU。當我通過MEA_%搜索時,我一無所獲。我有大約100條以ACD_開頭的記錄。當我通過ACD_%查詢時,我得到10條記錄無論我使用的是我的程序,我正在編寫以顯示此數據還是直接對我的數據庫運行查詢。

要執行這個我調用一個函數從我的GUI:

s.createdisplay(txtSellerSku.Text.Trim()+"_%");

這反過來調用該函數建立了幾個List<string>的:

inventory.AmazonSKUsDataTable builder = i.GetbySKU(sellersku);

其中呼籲這個函數從我的bll裏面實際運行我的查詢:

[System.ComponentModel.DataObjectMethodAttribute 
    (System.ComponentModel.DataObjectMethodType.Select, false)] 
    public inventory.AmazonSKUsDataTable GetbySKU(string SKU) 
    { 
     return Adatper.GetbySKU(SKU); 
    } 

所以這裏是我的問題爲什麼這個查詢不起作用?

編輯:這是我的數據

MerchantID MerchantSKU Date TotalQty SoldIn30Days ASIN SELECT ASIN, Date, DateSoldActualized FNSKU ItemName MaxShipmentDateAllSkus MaxShipmentDateThisSKU ItemName Rank Price Amazon

A1B7M9EQGNCLQA MEA_89930_C6.39 6/3/2011 6:35:07 PM 47 6/3/2011 6:35:07 PM 0 B0020OWVDS 6/3/2011 6:35:07 PM 6/3/2011 6:35:07 PM X0006J5C9F NULL NULL Medela TheraShells Breast Shells #89930 [Baby Product] 8,902 Baby 24.99 F

A1B7M9EQGNCLQA MEA_89973_C2.60 5/10/2011 12:00:00 AM 69 5/15/2011 12:00:00 AM 37 B00006FWVO 5/15/2011 12:00:00 AM 5/8/2011 12:00:00 AM B00006FWVO NULL NULL Medela Disposable Nursing Bra Pads - 30-pk [Baby Product] 2,603 Baby 9.07 F

A1B7M9EQGNCLQA MEA_89974 5/10/2011 12:00:00 AM 3 5/15/2011 12:00:00 AM 52 B00006FWVR 5/15/2011 12:00:00 AM 5/2/2011 12:00:00 AM B00006FWVR NULL NULL Medela Disposable Nursing Bra Pads - 60-pk. [Baby Product] 734 Baby 12.01 F

+0

@yosef 20K的記錄是一個小DB – 2011-06-14 15:51:59

回答

5

_字符是SQL的 「通過一個任意字符替換」 通配符 - 就像在DOS/Windows的?

試着做一個.. WHERE MerchantSKU LIKE 'MEA%' - 你現在有什麼東西嗎?

如果必須使用下劃線,嘗試將其放入方括號:

.. WHERE MerchantSKU LIKE 'MEA[_]%' 

更新:我無法重現你的問題 - 至少不會在SQL Server級別 - 這種嘗試自己:

DECLARE @merchant TABLE (MerchantID VARCHAR(50), MerchantSKU VARCHAR(50), TotalQty INT) 

INSERT INTO @merchant 
VALUES('A1B7M9EQGNCLQA', 'MEA_89930_C6.39', 47), 
('A1B7M9EQGNCLQA', 'MEA_89973_C2.60', 69), 
('A1B7M9EQGNCLQA', 'MEA_89974', 3), 
('X1B7M9EQGNCLQA', 'MEB_89930_C6.39', 4711), 
('X1B7M9EQGNCLQA', 'MEF_89930_C6.39', 42), 
('X1B7M9EQGNCLQA', 'MEZ_89930_C6.39', 7) 

SELECT * 
FROM @merchant 
WHERE MerchantSKU LIKE 'MEA[_]%' 

根據我的測試,找到並返回正確的行。我懷疑代碼中有些東西實際上是調用您的SQL查詢「很腥」並導致這些問題 - 這樣的SQL語句是有效的並且可行。

+0

這裏是唯一的一部分,如果我刪除或逃避它我的結果不會改變。 – 2011-06-14 15:55:49

+0

我顯示了一些行,我不確定你的意思是整個查詢 – 2011-06-14 17:54:00

+0

我將遵循代碼。 – 2011-06-14 18:43:37

0

您可以使用參數化查詢,如下面的結構。所以不需要用方括號括起下劃線,也不需要用引號加單引號。

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) { 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(); 
    string expression = "Parameter value"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "Your Stored Procedure"; 
    cmd.Parameters.Add("Your Parameter Name", 
       SqlDbType.VarChar).Value = expression;  
    cmd.Connection = con; 
    using (IDataReader dr = cmd.ExecuteReader()) 
    { 
     if (dr.Read()) 
     { 
     } 
    } 
}