小编Sam*_*ham的帖子

为什么要将我的SQL关键字大写?

可能重复:
是否有充分的理由对T-SQL关键字使用大写?

简单的问题.我个人发现一串小写字符比一串大写字符更易读.是一些旧的/流行的SQL味道敏感或什么?

以供参考:

select
    this.Column1,
    case when this.Column2 is null then 0 else this.Column2 end
from dbo.SomeTable this
    inner join dbo.AnotherTable another on this.id = another.id
where
    this.Price > 100
Run Code Online (Sandbox Code Playgroud)

SELECT
    this.Column1,
    CASE WHEN this.Column2 IS NULL THEN 0 ELSE this.Column2 END
FROM dbo.SomeTable this
    INNER JOIN dbo.AnotherTable another ON this.id = another.id
WHERE
    this.Price > 100
Run Code Online (Sandbox Code Playgroud)

前者对我来说似乎更具可读性,但我更经常地看到后一种方式.

sql formatting readability

108
推荐指数
9
解决办法
5万
查看次数

如何加快实例化大量对象?

对于任何显着大小的表,下面的代码都非常慢.(100,1000等...)罪魁祸首是实例化我的对象new T().请注意,这不是我最终确定的代码,我只是将其中的部分内容删除,以便更容易地进行分析.一旦我将代码重构成形状,实例化和初始化将一起发生.

有什么方法可以加快速度吗?我可能会忘记一些非常简单的事情,或者我可能会被剔除.希望是前者.

public static IList<T> ToList<T>(this DataTable table) where T : Model, new()
{
    T[] entities = new T[table.Rows.Count];

    // THIS LOOP IS VERY VERY SLOW
    for (int i = 0; i < table.Rows.Count; i++)
        entities[i] = new T();

    // THIS LOOP IS FAST
    for (int i = 0; i < table.Rows.Count; i++)
        entities[i].Init(table, table.Rows[i]);

    return new List<T>(entities);
}
Run Code Online (Sandbox Code Playgroud)

编辑更多信息:

任何给定的构造函数ModelType将如下所示:

public ModelType()
{
    _modelInfo = new ModelTypeInfo();
}
Run Code Online (Sandbox Code Playgroud)

任何给定的构造函数ModelTypeInfo将简单地设置一些字符串和字符串[]值,并且该类的唯一作用是提供值集.

编辑更多信息:

因为它似乎是一个热门话题,所以在打破对象构造和初始化之前,这是我的方法对于实数的看法:

public …
Run Code Online (Sandbox Code Playgroud)

c# performance

6
推荐指数
1
解决办法
2583
查看次数

如何在多对多映射表中有效地创建逻辑数据子集?

我在发票和信用卡交易之间存在多对多的关系,我正试图将这些交易映射到一起.思考问题的最佳方法是将TransactionInvoiceMap想象为二分图.对于每个连接的子图,找到所有发票的总和以及该子图中所有交易的总和.在我的查询中,我想返回为每个子图计算的值以及它们与之关联的事务ID.相关交易的总数应该相同.

更明确地说,给出以下交易/发票

Table: TransactionInvoiceMap
TransactionID  InvoiceID
1              1
2              2
3              2
3              3

Table: Transactions
TransactionID  Amount
1              $100
2              $75
3              $75

Table: Invoices
InvoiceID  Amount
1          $100
2          $100
3          $50
Run Code Online (Sandbox Code Playgroud)

我想要的输出是

TransactionID  TotalAsscTransactions TotalAsscInvoiced
1              $100                  $100
2              $150                  $150
3              $150                  $150
Run Code Online (Sandbox Code Playgroud)

请注意,发票2和3以及事务2和3是逻辑组的一部分.

这是一个显然有效的解决方案(简化,名称已更改),但速度非常慢.我很难弄清楚如何优化它,但我认为这将涉及将子查询消除到TransactionInvoiceGrouping中.随意提出完全不同的东西.

with TransactionInvoiceGrouping as (
    select 
        -- Need an identifier for each logical group of transactions/invoices, use
        -- one of the transaction ids for this.
        m.TransactionID,
        m.InvoiceID,
        min(m.TransactionID) over (partition by m.InvoiceID) …
Run Code Online (Sandbox Code Playgroud)

t-sql many-to-many aggregate-functions sql-server-2008

6
推荐指数
1
解决办法
470
查看次数

ASP.NET MVC响应过滤器+ OutputCache属性

我不确定这是一个ASP.NET MVC特定的东西或一般的ASP.NET,但这是正在发生的事情.我有一个动作过滤器,通过使用响应过滤器删除空格:

public class StripWhitespaceAttribute : ActionFilterAttribute
{
    public StripWhitespaceAttribute ()
    {

    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        base.OnResultExecuted(filterContext);

        filterContext.HttpContext.Response.Filter = new WhitespaceFilter(filterContext.HttpContext.Response.Filter);
    }
}
Run Code Online (Sandbox Code Playgroud)

当与OutputCache属性一起使用时,我对Response.WriteSubstitution的"donut hole caching"调用不起作用.第一次和第二次页面加载传递给WriteSubstitution的回调被调用,之后在输出缓存到期之前不再调用它们.我注意到这不仅仅是这个特殊的过滤器,而是Response.Filter上使用的任何过滤器......我错过了什么?

我也忘了提到我在没有使用MVC动作过滤器属性的情况下通过附加到global.asax中的PostReleaseRequestState事件并在那里设置Response.Filter值来尝试这个...但是仍然没有运气.

asp.net-mvc caching filter

5
推荐指数
1
解决办法
3527
查看次数

将数据库邮件用作电子邮件中继服务器是一个好主意吗?

我们的一个问题是我们的出站电子邮件服务器有时很糟糕.用户将在我们的应用程序中触发电子邮件,并且应用程序可能需要大约30秒才能实际发送.让我们更糟糕,并承认我们甚至没有在后台线程上这样做,所以在这段时间内用户完全被阻止.SQL Server数据库邮件已被提议作为此问题的解决方案,因为它基本上实现了一个消息队列,并且比我们的第三方电子邮件主机更接近,响应更快.对我们来说,这也很容易实现,因为它只是将一个调用替换SmtpClient.Send为执行存储过程.我们的大部分应用程序电子邮件都包含PDF,XLS等,我看到这些附件的大小高达20MB.

使用数据库邮件处理我们所有的应用程序电子邮件对我来说都不好,但由于实施成本极低,我很难说出任何人.我们的生产数据库服务器功能太强大,所以我不确定它是否也无法处理负载.任何想法或更安全的替代品?

sql-server database-mail emailrelay

5
推荐指数
1
解决办法
1444
查看次数

为什么合并复制在设置表的LOCK_ESCALATION时失败?

我们遇到合并复制问题.我们的发布者运行SQL Server 2008,而我们的两个订阅者运行2005.我们的发布者正试图ALTER TABLE Foo SET (LOCK_ESCALATION)向我们的订阅者发送命令.我想我记得在SQL Server 2008中看到这个命令是新的,如果是这样,那么命令在我们的2005服务器上会失败是有意义的.但是,我们的合并复制是为2005兼容性设置的.

模式脚本'if object_id(N'[dbo].[Users]')不是null exec('ALTER TABLE [dbo].[Users] SET(LOCK_ESCALATION = TABLE)')'无法传播给订阅者.

关于为什么我们的出版商会尝试这样做的任何想法?

编辑:我们2008服务器的兼容级别设置为"Sql Server 2005(90)"

sql-server replication sql-server-2008

3
推荐指数
1
解决办法
1668
查看次数

我如何解决C#在Generic类型上调用静态函数的限制

我有以下扩展方法,并希望使它更通用,所以我不必为我们域中的每个类实现它.

public static IList<User> ToList(this DataTable table)
{
    IList<User> users = new List<User>();

    foreach (DataRow row in table.Rows)
        users.Add(User.FromDataRow(row));

    return users;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个令人沮丧的限制?

编辑:下面的段落是bollocks,但我保留它,所以其中一个答案对未来的读者有意义:

用户以及我的其他类实现IDataModel. IDataModel只需要1种方法FromDataRow(DataRow row).在函数原型中放置一个显然没有帮助.

c# generics extension-methods

1
推荐指数
1
解决办法
676
查看次数

对于面向公众的网站,我是否绝对需要robots.txt文件?

我正在审查我的几个网站,以确保我的SEO基础被覆盖.相关网站上没有私人网页,我们希望将所有网页编入索引.无论如何,包括robots.txt文件,即使不需要,也会让我的网站看起来更有信誉,对Google来说更重要吗?

search-engine

0
推荐指数
1
解决办法
1329
查看次数