Запрос не работает - PullRequest
       1

Запрос не работает

2 голосов
/ 14 июня 2011

У меня есть оператор SQL:

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

У меня большая база данных с 20 000 записей.72 из этих записей имеют MerchantSKU, которые начинаются с MEA_.Когда я ищу по MEA_%, я ничего не получаю.У меня есть около 100 записей, которые начинаются с ACD_.Когда я запрашиваю по ACD_%, я получаю 10 записей. Использую ли я свою программу, пишу для отображения этих данных или запускаю запрос непосредственно к моей базе данных.

Чтобы выполнить это, я вызываю функцию из моего графического интерфейса:

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

Ответы [ 3 ]

5 голосов
/ 14 июня 2011

Символ _ - это подстановочный знак «заменить одним произвольным символом» в 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 как таковой действителен и работает.

2 голосов
/ 14 июня 2011

'_' в сопоставлении LIKE означает в sql любой отдельный символ.это может быть проблемой.

вы можете использовать его с escape:

where myvalue like 'MEA[_]%'

Смотрите здесь: http://msdn.microsoft.com/en-us/library/ms179859.aspx

0 голосов
/ 14 июня 2011

Вы можете использовать параметризованные запросы, как показано ниже. поэтому нет необходимости заключать подчеркивание в квадратные скобки или объединять одинарные кавычки с кавычками.

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()) 
        { 
        } 
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...