查询不工作
我有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
的_
字符是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语句是有效的并且可行。
这里是唯一的一部分,如果我删除或逃避它我的结果不会改变。 – 2011-06-14 15:55:49
我显示了一些行,我不确定你的意思是整个查询 – 2011-06-14 17:54:00
我将遵循代码。 – 2011-06-14 18:43:37
'_'
在LIKE比较在SQL指任何单个字符的一对夫妇行。这可能是问题所在。
,你可以与逃生使用它:
where myvalue like 'MEA[_]%'
您可以使用参数化查询,如下面的结构。所以不需要用方括号括起下划线,也不需要用引号加单引号。
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())
{
}
}
}
@yosef 20K的记录是一个小DB – 2011-06-14 15:51:59