Sql 查询不起作用
我有一个SQL语句:Sql 查询不起作用,sql,sql-server-2008,Sql,Sql Server 2008,我有一个SQL语句: SELECT ASIN, Date, DateSoldActualized, FNSKU, ItemName, MaxShipmentDateAllSkus, MaxShipmentDateThisSKU, MerchantID, MerchantSKU, SoldIn30Days, TotalQty FROM AmazonSKUs WHERE (MerchantSKU LIKE @MerchantSKU) 我有一个
SELECT ASIN, Date, DateSoldActualized, FNSKU, ItemName, MaxShipmentDateAllSkus, MaxShipmentDateThisSKU, MerchantID, MerchantSKU, SoldIn30Days, TotalQty
FROM AmazonSKUs
WHERE (MerchantSKU LIKE @MerchantSKU)
我有一个拥有20000条记录的大型数据库。这些记录中有72张是以MEA_u开头的MerchantSKU。当我用我的方式搜索时,我一无所获。我有大约100条以e ACD_开头的记录。当我通过ACD_u%I进行查询时,无论是使用我正在编写的程序来显示此数据还是直接对我的数据库运行查询,我都会得到10条记录
要执行此操作,我从GUI调用一个函数:
s.createdisplay(txtSellerSku.Text.Trim()+“\u3%”代码>
它依次调用此函数,该函数生成两个列表
:
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日期总数量在30天内,如选择ASIN,Date,datesSoldActuated FNSKU ItemName MaxShipmentDateAllSKU MaxShipmentDatesSKU ItemName排名价格亚马逊
A1B7M9EQGNCLQA MEA_89930_C6.39 2011年6月3日6:35:07 PM 47 2011年6月3日6:35:07 PM 0 B0020OWVDS 2011年6月3日6:35:07 PM 2011年6月3日6:35:07 PM X0006J5C9F零位Medela TheraShells乳腺壳#89930[婴儿产品]8902婴儿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 5/2011 12:00:00 AM B00006FWVO NULL Medela一次性护理胸罩垫-30 pk[婴儿产品]2603婴儿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零位一次性护理胸罩垫-60 pk。[Baby Product]734 Baby 12.01 F
“类似比较中的
在sql中表示任何单个字符。这可能就是问题所在
您可以将其与escape一起使用:
where myvalue like 'MEA[_]%'
看这里:
字符是SQL中的“替换为一个任意字符”通配符,与DOS/Windows中的?
非常相似
尝试执行。。MerchantSKU在哪里,比如“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语句本身是有效的,并且可以工作。您可以使用如下结构的参数化查询。所以不需要用方括号括起下划线,也不需要将单引号与引号连接起来
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记录是一个小数据,这里是唯一的部分,如果我删除或转义它,我的结果不会改变。我显示了一些行,我不确定你所说的整体是什么意思query@Joe提曼:为了获得最好的结果,可能要把它放到一个新问题中去!我使用了一个try-catch来捕获空值,而不是仅仅捕获一条记录然后继续,它捕获了我在数据表中的整个循环。