小编eck*_*kes的帖子

为什么在 BIGINT col 上的此查找具有额外的常量扫描、计算标量和嵌套循环运算符?

当我查看一些查询的实际执行计划时,我注意到 WHERE 子句中使用的文字常量显示为计算标量常量 scan的嵌套链。

sql工作室截图

为了重现这一点,我使用下表

CREATE TABLE Table1 (
    [col1] [bigint] NOT NULL,
    [col2] [varchar](50) NULL,
    [col3] [char](200) NULL
)
CREATE NONCLUSTERED INDEX IX_Table1 ON Table1 (col1 ASC)
Run Code Online (Sandbox Code Playgroud)

里面有一些数据:

INSERT INTO Table1(col1) VALUES (1),(2),(3),
                               (-9223372036854775808),
                               (9223372036854775807),
                               (2147483647),(-2147483648)
Run Code Online (Sandbox Code Playgroud)

当我运行以下(废话)查询时:

SELECT a.col1, a.col2
  FROM Table1 a, Table1 b
  WHERE b.col1 > 2147483648
Run Code Online (Sandbox Code Playgroud)

我看到它将在索引查找和标量计算(来自常量)的结果中执行嵌套循环绘图。

请注意,文字大于 maxint。它确实有助于编写CAST(2147483648 as BIGINT). 知道为什么 MSSQL 将其推迟到执行计划中,并且有没有比使用强制转换更短的方法来避免它?它是否也会影响到准备好的语句(来自 jtds JDBC)的绑定参数?

标量计算并不总是完成(似乎是索引查找特定的)。有时查询分析器不会以图形方式显示它,而是col1 < scalar(expr1000)在谓词属性中显示它。

我已经在 Windows 7 上的 MS SSMS 2016 …

sql-server execution-plan cast sql-server-2014

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

在 SQL Server Express 上启用管理员连接以修复登录触发器

好吧,幸运的是我在我的测试环境中遇到了这个错误。我非常害怕这个错误,以至于我禁用了我在生产环境中使用的所有登录触发器。

我创建了著名的登录触发器,并将数据库置于离线模式,只是为了处理其他事情。然后我发现因为触发器找不到表,所以我不能再访问实例了。有很多与此相关的问题,但即使做了我能找到的一切,我仍然无法访问该实例,即使使用 SQLCMD 也无法访问。

我这样做:

sqlcmd -S server\instance -U sa -P <pass>  -A
Run Code Online (Sandbox Code Playgroud)

如果我不使用,-A我会收到著名的错误:

logon failed for sa due trigger execution.
Run Code Online (Sandbox Code Playgroud)

如果我使用-A

Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:SQL Server 网络接口:获取专用管理员连接 (DAC) 端口时出错。确保 SQL Browser 正在运行,或检查端口号 [xFFFFFFFF] 的错误日志。. Sqlcmd:错误:用于 SQL Server 的 Microsoft ODBC 驱动程序 11:登录超时已过期。Sqlcmd:错误:Microsoft ODBC Driver 11 for SQL Server:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。

为什么我无法连接到sql server

sql server express 在这里。

我可以启用 SQL Browser,但我仍然无法访问它。

我不认为这个问题是重复的,因为不是关于触发器,而是关于为什么我无法使用 SQLCMD 访问服务器。我几乎知道如何解决这个问题。我只是不知道如何在不触发触发器的情况下访问 sql server。

trigger sql-server sql-server-express dac

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