2011-06-14 77 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()) 
     { 
     } 
    } 
}