查询无效

时间:2011-06-14 15:47:41

标签: sql sql-server-2008

我有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

3 个答案:

答案 0 :(得分: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语句是有效且有效的。

答案 1 :(得分:2)

LIKE比较中的

'_'在sql中表示任何单个字符。这可能是问题所在。

你可以将它与逃生一起使用:

where myvalue like 'MEA[_]%'

看这里: http://msdn.microsoft.com/en-us/library/ms179859.aspx

答案 2 :(得分: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()) 
        { 
        } 
    } 
}