小编J.D*_*.D.的帖子

SELECT * 在生产代码中的良好用例是什么?

出于习惯,我从不SELECT *在生产代码中使用(我只将它用于临时废料查询,通常是在学习对象的模式时)。但是我现在遇到了一个案例,我很想使用它,但如果我使用它会觉得很便宜。

我的用例是在一个存储过程中,其中创建了一个本地临时表,该表应始终与用于创建它的基础表相匹配,无论何时运行该存储过程。临时表是在很晚之后填充的,因此快速创建临时表而不冗长的方法SELECT * INTO #TempTable FROM RealTable WHERE 1 = 0尤其适用于具有数百列的表。

如果我的存储过程的使用者不知道动态结果集,那么我将服务出售给 有什么问题SELECT *吗?

sql-server best-practices sql-server-2016

39
推荐指数
5
解决办法
8353
查看次数

选择到临时表中通常比选择到实际表中更快吗?

我想我曾经在某处读到过写入 tempdb 比不在 tempdb 中的实际表更快。这在任何情况下都是真的吗?我想我记得它说了一些关于 tempdb 并将数据存储在内存中的特殊内容?

sql-server memory tempdb temporary-tables sql-server-2016

35
推荐指数
2
解决办法
4577
查看次数

32
推荐指数
2
解决办法
3567
查看次数

如何获取执行中的存储过程的参数值?

有没有办法在存储过程正在执行过程中获取传递给存储过程的参数的值?(我正在尝试调试一个正在运行的存储过程。)

我知道我可以看到当前正在使用 sys.dm_exec_requests 和 sys.dm_exec_sql_text DMV 执行的存储过程的查询,但它们没有显示正在使用的参数的值。

sql-server stored-procedures dmv sql-server-2016

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

为什么将 DATE 字段转换为非确定性的 VARCHAR 数据类型,有没有办法使其具有确定性?

我正在尝试创建一个索引视图,其中索引位于视图中的一个字段上,该字段是视图中基础表的一堆列的散列。

下面是一个例子:

CREATE VIEW CoolHashedView WITH SCHEMABINDING AS

    SELECT 
        KeyId,
        CONVERT
        (
            VARCHAR(34), 
            HASHBYTES('MD5', TextColumn1 + '||' + TextColumn2 + '||' + CAST(DateColumn1 AS VARCHAR(50)), 
            2
        ) AS HashedData
    FROM dbo.BoringTable;

    CREATE UNIQUE CLUSTERED INDEX IX_CoolHashedView_KeyId_HashedData ON CoolHashedView (KeyId, HashedData);
Run Code Online (Sandbox Code Playgroud)

当我尝试创建上述索引时,它失败并抛出以下错误:

消息 2729,级别 16,状态 1,第 26 行视图“CoolHashedView”中的列“HashedData”不能用于索引或统计信息或作为分区键,因为它是不确定的。

当我从 HASHBYTEs 函数中删除日期字段时,聚集索引然后成功创建。

我的猜测是它与格式化日期或不同时区的不同方式有关?...我变得更暖和了吗?

sql-server clustered-index materialized-view sql-server-2016 non-deterministic

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

是否有可靠的方法来检查触发的触发器是否是另一个*特定*触发器的 DML 操作的结果?

当触发器被触发时,是否有任何方法可以从触发器内部判断它是由于另一个特定触发器中发生的 DML 操作而被触发的?

有关调用堆栈的任何信息是否有可能在函数中公开EVENTDATA()?或者其他功能?我宁愿不必分解 XML。

理想情况下,我希望从第二个触发器的范围内获取执行导致第二个触发器触发的 DML 的原始触发器的名称。但我也愿意接受类似的识别来源的方法。

我可以完全控制有问题的两个触发器的代码。

trigger sql-server t-sql standard-edition sql-server-2019

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

是否可以从另一个数据库中的一个数据库的计划缓存中重用查询计划?

例如,如果我点击 sys 动态视图来选择一个特定的查询计划,我是否能够将该查询计划插入到另一个数据库的计划缓存中,运行相同的查询?(我知道查询经过哈希处理并进行比较以确定何时生成新计划,因此在我的示例中,我将确保查询确实是逐个字符完全相同的。)

sql-server optimization execution-plan sql-server-2016

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

链接服务器连接开始失败,并出现“无法生成 SSPI 上下文... SQL Server 网络接口:登录尝试失败”错误?

问题

我在同一个域中有两个 SQL Server 2016 标准版服务器。ServerA有两个链接服务器连接设置到ServerB

第一个链接服务器连接使用专用的远程SQL 登录安全上下文。那个一直是并且仍然工作正常。

第二个连接使用“登录的当前安全上下文”,它是ServerA 上的Windows 身份验证 (AD) 登录。直到今天,这也运行良好。

今天突然间,连接到 ServerA 然后尝试运行使用第二个链接服务器连接的查询的每个人最终都会遇到以下错误:

链接服务器“LinkedServerName”的 OLE DB 访问接口“SQLNCLI11”返回消息“无法生成 SSPI 上下文”。消息 -2146893044,级别 16,状态 1,第 0 行 SQL Server 网络接口:登录尝试失败

此外,用户目前可以直接连接到 ServerA 和 ServerB,甚至可以直接对 ServerB 上的对象执行查询,但是当他们尝试通过 ServerA 上的链接服务器运行引用 ServerB 上相同对象的查询时,这是唯一一次他们得到上述错误,目前。


相关信息

这是我们目前看到的SPN和日志(抱歉所有混淆):

ServerB 成功的 SPN 注册 SQL 日志:

ServerA SQL 日志

ServerB 成功的 SPN 注册 SQL 日志:

ServerB SQL 日志

  • 请注意,两台服务器都为自己的端口 1433 和未指定端口成功注册了 SPN。

ServerA 注册的 SPN:

ServerA 注册的 SPN

  • 我不确定第二个“CN=”行(倒数第二行)是什么,但它的字面意思是“CN=ServerASvc”,但这不是 SQL 服务帐户的名称。SQL 服务帐户是“SQLServiceAccount1”。
  • 我也不确定为什么最后一行只有服务器名称“ServerA”的 SPN(我们的 DC 中确实有一个 Host/CName),但对于前面的一行来说似乎是多余的。 …

sql-server linked-server errors sql-server-2016 logon

9
推荐指数
2
解决办法
657
查看次数

重新启动 SQL 服务(在机器上)是否会清除服务器缓存(用于查询计划和统计信息)?

当您仅重新启动 SQL 服务本身时,服务器缓存是否会被擦除(类似于重新启动 SQL 实例/机器时)?

sql-server statistics sql-server-2008-r2 cache plan-cache

8
推荐指数
2
解决办法
4040
查看次数

如果在游标中当前使用存储过程时更改了存储过程,游标是否继续使用更改前的旧查询?

如果一个存储过程(或视图)当前正在长时间运行的游标中使用,而我更改了该存储过程,游标是否会继续使用存储过程的旧实例,直到游标完成?

sql-server stored-procedures cursors ddl sql-server-2016

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