小编Gre*_*reg的帖子

LEFT JOIN明显快于INNER JOIN

我有一个表(MainTable)有超过600,000条记录.它通过JoinTable父/子类型关系中的第二个表()连接到自身:

SELECT   Child.ID, Parent.ID
FROM     MainTable
AS       Child
JOIN     JoinTable
      ON Child.ID = JoinTable.ID
JOIN     MainTable
AS       Parent
      ON Parent.ID = JoinTable.ParentID
     AND Parent.SomeOtherData = Child.SomeOtherData
Run Code Online (Sandbox Code Playgroud)

我知道每个子记录都有父记录,JoinTable中的数据是精确的.

当我运行此查询时,运行需要几分钟.但是,如果我使用左连接加入Parent,则运行时间<1秒:

SELECT   Child.ID, Parent.ID
FROM     MainTable
AS       Child
JOIN     JoinTable
      ON Child.ID = JoinTable.ID
LEFT JOIN MainTable
AS       Parent
      ON Parent.ID = JoinTable.ParentID
     AND Parent.SomeOtherData = Child.SomeOtherData
WHERE    ...[some info to make sure we don't select parent records in the child dataset]...
Run Code Online (Sandbox Code Playgroud)

我理解INNER JOINa和a 之间结果的差异LEFT JOIN …

sql performance join sql-server-2005

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

在sql case语句中使用比较符号

我正在寻找一种使用小于和大于符号在sql select查询中构建case语句的方法.例如,我想根据变量选择排名:

DECLARE @a INT
SET @a = 0

SELECT CASE 
         WHEN @a < 3 THEN 0
         WHEN @a = 3 THEN 1
         WHEN @a > 3 THEN 2
       END
Run Code Online (Sandbox Code Playgroud)

我想把它写成:

DECLARE @a INT
SET @a = 0

SELECT CASE @a
         WHEN < 3 THEN 0
         WHEN 3 THEN 1
         WHEN > 3 THEN 2
       END
Run Code Online (Sandbox Code Playgroud)

...但SQL不允许我以这种方式使用<和>符号.有没有办法可以做到这一点是SQL 2005,还是我需要像第一个那样使用代码.

只需要一次代码的原因是因为它会使代码更易读/可维护,而且因为我不确定SQL服务器是否必须为每个CASE语句运行计算.

我正在寻找一个VB.NET案例声明equivelent:

Select Case i
    Case Is < 100
        p = 1
    Case Is >= 100
        p = 2
End Select
Run Code Online (Sandbox Code Playgroud)

也许这在SQL中是不可能的,没关系,我只想确认一下.

sql t-sql sql-server sql-server-2005

20
推荐指数
2
解决办法
7万
查看次数

如何穿越dacpac

我们希望将dbproj升级到sqlproj,以便我们可以将它指向新的SQL 2012数据库.我们现在有一个程序读取.dbschema xml文件以查找所有表和列并从中检索信息.我们使用这些数据来构建我们自己的自定义类.

新的sqlproj文件现在生成一个dacpac,我们想要进行干预以获取我们需要的数据.我写了以下内容来尝试遍历dacpac并获取我需要的信息:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SqlServer.Dac;
using Microsoft.SqlServer.Dac.Extensions;
using Microsoft.SqlServer.Dac.Model;
namespace DacPacReader
{
    class Program
    {
        static void Main(string[] args)
        {
            using (System.IO.TextWriter writter = new System.IO.StreamWriter(@"c:\temp\output.txt"))
            {
                using (TSqlModel model = new TSqlModel(@"C:\temp\Data.dacpac"))
                {
                    var allTables = model.GetObjects(DacQueryScopes.All, ModelSchema.Table);

                    foreach (var table in allTables)
                    {
                        writter.WriteLine(table.Name);
                        foreach (var column in table.GetChildren().Where(child => child.ObjectType.Name == "Column"))
                        {
                            writter.WriteLine("\t" + column.Name);
                            writter.WriteLine("\tProperties:");
                            foreach (var property in column.ObjectType.Properties)
                            {
                                writter.WriteLine("\t\t" + property.Name …
Run Code Online (Sandbox Code Playgroud)

c# sql-server dacpac

12
推荐指数
2
解决办法
3448
查看次数

从TFS 2012打开SQL文件时出错

当我尝试在Visual Studio 2012(TFS 2012)中从源代码管理资源管理器中查看.sql文件时,我收到以下错误消息:

TF10187:无法打开文档

文件路径\文件名

用户取消了保存对话框

错误信息

它只发生在SQL文件中.该文件确实存在于TFSTemp文件夹中,我可以双击并从那里打开它.我需要更改以修复此错误消息?

tfs visual-studio-2012

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

C#MVC网站中的面包屑使用Bootstrap

我想在我的网站上添加面包屑,但我不太清楚如何去做.我已经能够使用以下代码获得基本工作:

<ol class="breadcrumb">
    <li class="active">
        @Html.ActionLink("Home", "Index", "Home")
        @if (ViewContext.RouteData.Values["controller"] != "Home" && ViewContext.RouteData.Values["action"] != "Index")
        {
            @:> @Html.ActionLink(ViewContext.RouteData.Values["controller"].ToString(), "Index", ViewContext.RouteData.Values["controller"].ToString())
        }

        > @ViewBag.SubTitle
    </li>
</ol>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,这实际上并没有跟踪你的历史,它只是告诉你

Home > ControllerName > CurrentItem
Run Code Online (Sandbox Code Playgroud)

例如

Home > Members > Greg Dodd
Run Code Online (Sandbox Code Playgroud)

当您来自会员搜索页面时,这种方法很有效,但是如果您来自不同的页面,则会丢失该历史记录.如何使用MVC中的History创建痕迹痕迹?

我想我正在寻找的是:

Home > Controller1 > PreviousItem > ... > CurrentItem
Run Code Online (Sandbox Code Playgroud)

例如,如果你打开一个博客,然后是一个特定的博客项目,然后点击作者名称,你的面包屑应该是:

Home > Blog > SomeBlogTitle > AuthorName
Run Code Online (Sandbox Code Playgroud)

但是,如果您打开了作者列表然后选择了特定作者,则会看到使用相同控制器渲染的相同视图,但是面包屑应该显示:

Home > Authors > AuthorName
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc breadcrumbs asp.net-mvc-4 twitter-bootstrap

8
推荐指数
3
解决办法
3万
查看次数

SQL项目动态设置恢复模型

我们在Visual Studio 2012中有一个SQL Server数据库项目(.sqlproj),我们将其用作数据库模式的源代码控制.它所做的一件很酷的事情是生成SQL以在我们发布代码时更新架构.

我们有3个配置文件设置 - 开发,测试,现场 - 这一切都正常.

最近我们将实时数据库从"简单"恢复更改为"完全"恢复.在我们尝试将下一个部署运行到开发和测试之前,一切都很棒.我们不希望在开发和测试时将恢复模式从简单更改为完全 - 我们无需更改它.但是,当我们发布数据库项目时,它现在想要设置它.

我想根据我使用的发布配置设置恢复模型.我已经尝试创建一个变量并在项目xml中分配它:

<Recovery>$(RecoveryModel)</Recovery>
Run Code Online (Sandbox Code Playgroud)

但它仍尝试在部署脚本中将其设置为"Full":

:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\"
:setvar DefaultLogPath "C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\"
:setvar RecoveryModel "Simple"

GO
:on error exit
GO
/*
Detect SQLCMD mode and disable script execution if SQLCMD mode is not supported.
To re-enable the script after enabling SQLCMD mode, execute the following:
SET NOEXEC OFF; 
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
    BEGIN
        PRINT N'SQLCMD mode must be enabled …
Run Code Online (Sandbox Code Playgroud)

visual-studio-2012 sqlproj

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

估算任务的时间

我们刚开始在公司做scrum.我们花了一些时间来估算使用计划扑克的努力,然后在详细任务完成后,对每项任务进行时间估算.

我们遇到的问题是时间估计总是错误的(通常估计过高).虽然我们都同意一项努力,让一个团队就任务的时间达成一致意见要困难得多 - 每小时需要1个人可能会花费3个小时.我们最终走到了中间的某个地方.

谁应该提出任务的时间估计以及何时发生?

这只是我们需要更多练习的事情,还是我们做错了?

scrum estimation

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

存储TOTP的密钥

我正在设置我的网站(C#/ SQL 2008)以允许使用Google身份验证器进行双因素身份验证.我有网站工作,从获取QR码到生成上一个/当前/下一个键(我很高兴接受3,以防时钟不同步).

显然,我们需要为每个用户生成一个密钥,否则每个用户都会拥有相同的一次性密码.

我的问题是存储此密钥的最佳做法是什么?我可以将它作为纯文本存储在users表中,还是应该加密?

authentication encryption sql-server-2008 google-authenticator

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

无法运行Set-AzureDeployment

我正在尝试将我的.net网站部署到azure,作为TFS构建过程的一部分.我正在编写一个PowerShell脚本来执行此操作,但我遇到了set-AzureDeployment -Upgrade命令.我不确定是否有更简单的方法,但我正在尝试根据windows azure网站上的代码实现上传:http: //www.windowsazure.com/en-us/develop/net/common-任务/连续交付/#步骤4

当我运行以下内容时:

Set-AzureDeployment -Upgrade -SERVICENAME "MYSVC" -Mode Auto -Package D:\MYSVC\Drops\Azure.cspkg -configuration D:\MYSVC\Drops\ServiceConfiguration.Cloud.cscfg -Slot Staging -Force
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Set-AzureDeployment : The path variable 'SERVICENAME' in the
UriTemplate must be bound to a non-empty string value.
Parameter name:
parameters At line:1 char:20
+ Set-AzureDeployment <<<<  -Upgrade -SERVICENAME "MYSVC" -Mode Auto -Package D:\MYSVC\Drops\Azure.cspkg -Configuration D:\MYSVC\Drops\ServiceConfiguration.Cloud.cscfg -Slot Staging -Force
    + CategoryInfo          : CloseError: (:) [Set-AzureDeployment], ArgumentException
    + FullyQualifiedErrorId : Microsoft.WindowsAzure.Management.ServiceManagement.HostedServices.SetAzureDeploymentCommand
Run Code Online (Sandbox Code Playgroud)

我已经检查了所有的parementers,据我所知,它们都是正确的(我打电话时我正在使用的服务名称Get-AzureDeployment -ServiceName MYSVC).我究竟做错了什么?

deployment powershell azure

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

SQL Server 2005:将 Transaction_ID 映射到 @@SPID

有没有办法transaction_id从某个地方映射sys.dm_tran_active_transactionsSPIDSQL Server 2005 中的某个地方?

sql-server sql-server-2005

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

SSIS条件分割多个真实路径

我在dtsx包中有一个数据流,它处理我需要处理的所有数据.最后,我需要执行一些清理任务.例如,假设以下结构:

我想做什么

如果所有3个案例的记录都为真,那么我想运行所有三个OLE DB命令.如果记录仅对案例1为真,那么它应该只运行案例1.

我可以使用多播和3个单独的条件分割(如下所示),但我希望有一个更清洁的方式.有任何想法吗?

可能的选择. 有没有更好的办法?

sql-server ssis

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