我试图返回一个数据页面,并在一个存储过程中的所有数据的行计数,如下所示:
WITH Props AS
(
SELECT *,
ROW_NUMBER() OVER (ORDER BY PropertyID) AS RowNumber
FROM Property
WHERE PropertyType = @PropertyType AND ...
)
SELECT * FROM Props
WHERE RowNumber BETWEEN ((@PageNumber - 1) * @PageSize) + 1 AND (@PageNumber * @PageSize);
Run Code Online (Sandbox Code Playgroud)
我无法返回行计数(最高行号).
我知道这已经讨论过了(我已经看过了: 使用row_number从查询中获取@@ rowcount的有效方法)但是当我在CTE中添加COUNT(x)OVER(PARTITION BY 1)性能降低并且上面的查询通常没有时间需要永远执行.我估计这是因为计算了每一行的数量?我似乎无法在另一个查询中重用CTE.Table Props有100k记录,CTE返回5k记录.
我有一系列表格并在它们之间导航.
每个表单都有一组控件,我从SQLite数据库加载属性,这是长(约1s)操作,不会给用户最好的感觉,因为表单正逐渐被绘制.
我不介意延迟,但我希望在加载所有数据时绘制表单.我想避免使用新线程,因为这会导致跨线程操作问题.
除了通过缓存加载的数据来加速整个应用程序之外,还有什么好的解决方案吗?
我有一个查询连接4个表,WHERE子句中有很多条件.该查询还包括数字列上的ORDER BY子句.返回需要6秒,这太长了,我需要加快速度.令人惊讶的是,我发现如果我删除ORDER BY子句需要2秒钟.为什么订单会产生如此巨大的差异以及如何优化它?我正在使用SQL Server 2005.非常感谢.
由于我正在清除执行计划缓存,因此我无法确认ORDER BY有很大的不同.但是,你能说明如何加快这一点吗?查询如下(为简单起见,有"SELECT*",但我只选择我需要的那些).
SELECT *
FROM View_Product_Joined j
INNER JOIN [dbo].[OPR_PriceLookup] pl on pl.siteID = NodeSiteID and pl.skuid = j.skuid
LEFT JOIN [dbo].[OPR_InventoryRules] irp on irp.ID = pl.SkuID and irp.InventoryRulesType = 'Product'
LEFT JOIN [dbo].[OPR_InventoryRules] irs on irs.ID = pl.siteID and irs.InventoryRulesType = 'Store'
WHERE (((((SiteName = N'EcommerceSite') AND (Published = 1)) AND (DocumentCulture = N'en-GB')) AND (NodeAliasPath LIKE N'/Products/Cats/Computers/Computer-servers/%')) AND ((NodeSKUID IS NOT NULL) AND (SKUEnabled = 1) AND pl.PriceLookupID in (select TOP 1 PriceLookupID …Run Code Online (Sandbox Code Playgroud) 我在代码中有一个非常奇怪的问题,我不希望它会失败。这是一个基于 AspDotNetStoreFront 的网站,有一些流量但不是那么大。尝试从读取器读取数据库字段时,站点间歇性崩溃。这发生在网站的不同地方。此类代码的示例在下面与object pValue = rs["PropertyValueString"]; 的行中。
private Dictionary<string, object> GetPropertValuePairs(string userName)
{
string query = string.Format("select PropertyName, PropertyValueString from dbo.profile with(nolock) where CustomerGUID = {0} and StoreID = {1}", DB.SQuote(userName),AppLogic.StoreID());
Dictionary<string, object> propertyValues = new Dictionary<string, object>();
using (SqlConnection conn = new SqlConnection(DB.GetDBConn()))
{
conn.Open();
using (IDataReader rs = DB.GetRS(query, conn))
{
while (rs.Read())
{
string pName = DB.RSField(rs, "PropertyName");
object pValue = rs["PropertyValueString"];
if (propertyValues.ContainsKey(pName) == false)
{
propertyValues.Add(pName, pValue);
}
}
rs.Close();
rs.Dispose();
}
conn.Close();
conn.Dispose(); …Run Code Online (Sandbox Code Playgroud) 有人可以解释一下 if 语句中空条件运算符的逻辑吗?
想象一下下面的代码
List<string> items = null;
if (items?.Count == 0)
{
Console.WriteLine("error");
}
else
{
Console.WriteLine("OK");
}
Run Code Online (Sandbox Code Playgroud)
以上将打印OK。为什么它在下一个块不会编译时编译?
if (items?.Any()) // won't compile but if (items?.Count() == 0) would
{
...
}
Run Code Online (Sandbox Code Playgroud)
我猜?。当检测到 null 并且跳过整个 if 时将停止执行,但为什么“?.Any()”不是这种情况?仅仅因为它是一种方法而“count”是一种属性?
为什么 Linq 扩展方法 Any() 需要从 Nullable 到 bool 的显式转换,其中 Count() == 0 编译时不需要 Nullable 到 int 的转换?
jquery datepicker非常有趣,但我遇到了一个奇怪的错误.我试图禁用某些日子,即.2009年10月28日,但11月28日在日历上被禁用!知道我在这里做错了什么吗?disabledDays数组变量是在服务器上注册的脚本,因为结束日期来自数据库.
<script type="text/javascript">
$(document).ready(function() {
$("#datepicker").datepicker(
{
dateFormat: 'dd/mm/yy',
changeYear: false,
yearRange: '0:+1',
numberOfMonths: 2,
firstDay: 1,
minDate: '0',
maxDate: '+2m',
altFormat: 'dd/mm/yy',
beforeShowDay: DisableClosedDays
});
});
function DisableClosedDays(calendarDate) {
for (i = 0; i < disabledDays.length; i++) {
if (calendarDate.getDate() == disabledDays[i][0]
&& calendarDate.getMonth() == disabledDays[i][1]
&& calendarDate.getFullYear() == disabledDays[i][2]) {
return [false, ''];
}
}
return [true, ''];
}
</script>
<script type="text/javascript">
//<![CDATA[
var disabledDays = [[22,10,2009],[30,10,2009],[12,10,2009]];
//]]>
</script>
Run Code Online (Sandbox Code Playgroud) 我有以下linq代码.
searchResults = (from item1 in searchResults
join item2 in coll
on item1.skuID equals item2.Skuid
where item2.SearchableValue == value
select item1).ToList();
Run Code Online (Sandbox Code Playgroud)
变量searchResults作为通用List在方法中传递.上面的linq段过滤列表.当从方法返回时,我希望修改列表但引用在传入时保持不变.如何修改我的引用,而不是副本?谢谢.
c# ×3
sql ×3
linq ×2
performance ×2
sql-server ×2
datareader ×1
datepicker ×1
javascript ×1
jquery-ui ×1
rendering ×1
row-number ×1
rowcount ×1
sqlclient ×1
winforms ×1