小编Aar*_*and的帖子

是否可以获得使用 WITH EXECUTE 创建的过程列表?

是否可以获得使用创建的存储过程列表WITH EXECUTE

我尝试查看sys.procedures,但它们都将主体设置为null,并且我知道有一些程序是以这种方式创建的。

sql-server stored-procedures sql-server-2014

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

使用动态 SQL 定位行时出现问题

我一般是 SQL 新手,所以我在设计的一些存储过程中遇到了一些问题。我的程序接受 3 个参数。位置(或表名基本上是 varchar)、房间号 (varchar) 和 'xxx-xxxx' 形式的电话号码 (char)。这是该过程的代码。

ALTER PROCEDURE [dbo].[AddPhoneNumberToRoom]
    @Location    varchar(25),
    @Room        varchar(10),
    @PhoneNumber char(8)

AS
BEGIN
SET NOCOUNT ON;

    DECLARE @String varchar(100);
    SELECT @String = ' UPDATE ' + @Location + 
                     ' SET PhoneNumber = ' + @PhoneNumber +
                     ' WHERE Room = ' + @Room;
    EXEC(@String);
END
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

UPDATE 语句与 FOREIGN KEY 约束“FK_Apartments_PhoneNumbers”冲突。冲突发生在数据库“CMPhone”、表“dbo.PhoneNumbers”、列“PhoneNumber”中。

电话号码在 PhoneNumber 表中,所以当我这样做时:

UPDATE Apartments SET PhoneNumber='123-4567' WHERE Room='2'
Run Code Online (Sandbox Code Playgroud)

它工作得很好。该PhoneNumbers表还看起来是这样的,只是在它的一个数字。

PhoneNumber
-----------
123-4567
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures dynamic-sql t-sql

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

简单地插入到临时表并失败

谁能告诉我为什么这对我不起作用?

CREATE TABLE #UndistributedCmds
(
pendingcmdcount int,
estimatedprocesstime INT
)
INSERT INTO #UndistributedCmds

EXEC sp_replmonitorsubscriptionpendingcmds ...
Run Code Online (Sandbox Code Playgroud)

错误:

消息 8164,级别 16,状态 1,过程 sp_replmonitorsubscriptionpendingcmds,第 152 行
INSERT EXEC 语句不能嵌套。

该错误似乎暗示存储过程定义的第 152 行是问题所在,但我无法理解这一点。这是因为存储过程本身有多个存储过程吗?

sql-server stored-procedures t-sql temporary-tables

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

创建视图时语法错误不正确

返回错误信息:

消息 102,级别 15,状态 1,过程 vw_IVStockAging,第 12 行
“-”附近的语法不正确。

当我执行此操作时:

CREATE VIEW vw_IVStockAging
AS SELECT IV00101.ITEMNMBR AS ITEMNUMBER,
IV00101.ITEMDESC AS ITEMNAME,
...
(IV10200.QTYRECVD – IV10200.QTYSOLD) AS QTYAVAILABLE
FROM ...
Run Code Online (Sandbox Code Playgroud)

sql-server

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

复制在请求之间花费太多时间

我们在 SQL Server 2014 中使用事务复制,有一个主(发布者)、1 个分发者(专用服务器)和 3 个从(订阅者)。

所有的写入都是对 master 进行的,而读取是从 3 个订阅者之一完成的。

我的问题是,如果您进行了插入/更新/删除操作,并且页面正在刷新,则更新尚不存在。在订阅者更新之前有 1-4 秒的延迟,这会使用户感到困惑,因为该行已插入/删除/更新,但尚未反映在订阅者上...

我们正在考虑进行点对点复制,但这似乎是 IDENTITY 的开销,它可以返回写入一个,但复制也需要太多时间......

我们可以/应该做什么?

replication sql-server transactional-replication

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

在什么情况下我更有可能从异步自动更新统计信息中受益?

我每周使用Ola Hallengren 的解决方案更新统计数据。

根据下面的文章,我正在考虑启用 Auto Stats Async 并打开跟踪标志 2371。

具有大表的数据库应使用自动更新统计数据异步功能

现在,我的数据库的 async 选项为 false:

在此处输入图片说明

此外,来自SQL Server 2008 及更高版本的重要修补程序

此设置允许异步自动更新统计信息,同时您当前运行的查询继续使用旧统计信息,直到更新的统计信息可供使用,从而降低不可预测的查询性能。对此的替代方案(这是默认设置)是暂停查询执行(仅适用于使用该对象统计信息的查询),同时为该对象自动同步更新统计信息。根据对象的大小以及硬件和 I/O 子系统,这可能需要几秒钟到几分钟的时间。

题:

在测试环境中,在将 Auto Update Stats Async 设置为 ON 之前/之后,可以进行哪些好的简单测试?

在什么情况下我更有可能从异步自动更新统计信息中受益?

数据库 500GB+,大表。

sql-server optimization statistics sql-server-2014

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

具有可用性组的 tempdb 的任何不同指南?

我在两节点 Windows Server 故障转移群集上运行的 SQL Server 2014 上设置了一个可用性组。设置由两个独立实例 + 同步自动故障转移组成。

我读过的许多 Microsoft 文章都提倡为 TempDB 使用多个文件来提高性能。似乎他们建议使用 8 个文件。

在这种配置的情况下,我应该这样做吗?它会提高性能吗?

sql-server tempdb availability-groups sql-server-2014

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

在 DROP/Add 列语句中更改 Key (PK, FK) 属性

我想通过添加一列来更改表格。到目前为止,这里没什么可看的,但我想让这个列成为复合键的一部分,即,我现在有一个布局

table_name( Field_1  datatype PK, Field_2 datatype,....) 
Run Code Online (Sandbox Code Playgroud)

并且我希望插入的列,比如 Field_k 与现有的单字段 PK 一起成为 PK 的一部分。

我还没有找到有关如何执行此操作或是否可行的任何来源。请问有什么建议吗?

foreign-key database-design sql-server alter-table ddl

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

使用探测残差识别执行计划

我正在尝试找出具有Probe Residual.

需要了解以下内容

  1. 哪个物理和逻辑运算符有这个 Probe Residual
  2. 查询中该运算符的成本百分比是 多少
  3. 相关执行计划
  4. 查询文本

以下是我的一次尝试——但我被困在获取其他细节上。如何获取这些详细信息?

注意:我使用的是 SQL Server 2012

WITH XMLNAMESPACES
(
    DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan'
)
SELECT
    DECP.cacheobjtype,
    DECP.objtype,
    DECP.plan_handle,
    DEQP.objectid,
    DEQP.query_plan,
    DEST.[text]
FROM sys.dm_exec_cached_plans AS DECP
CROSS APPLY sys.dm_exec_query_plan(DECP.plan_handle) AS DEQP
CROSS APPLY sys.dm_exec_sql_text(DECP.plan_handle) AS DEST
WHERE
    1 = DEQP.query_plan.exist(
        '//RelOp[
            @PhysicalOp = "Hash Match"
            ]')
Run Code Online (Sandbox Code Playgroud)

探头残余

在此处输入图片说明

下面引用 Grant Fritkey 和 Rob Farley 的博客/文章

  1. 哈希匹配上的探针残差 - 可怕的 DBA 之家
  2. 当你有一个哈希匹配时探测残差——执行计划中的隐藏成本

xml sql-server execution-plan sql-server-2012 plan-cache

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

连接表名每天都在变化的表

我需要一些帮助来弄清楚如何将表连接到我的查询中。表名每天都在更改,因为表名中使用了日期,而旧表因不再需要而被删除。

我的查询查找在数据库中有数据并且正在处理的“扫描”(因为缺少更好的词)。

我目前的查询是:

USE RetinaCSDatabase
SELECT S.ScanID [Scan ID], S.PolicyName [Scan], DATEADD(hh, +2, S.StartTime) [Scan Start], A.AssetName [Scanner], COUNT(AIPS.AssetIPID) [Hosts], S.TransactionGroup [Transaction Group ID]
FROM Scan S (NOLOCK)
LEFT JOIN Scanner SC (NOLOCK) ON S.ScannerID = SC.ScannerID
LEFT JOIN Asset A (NOLOCK) ON SC.AssetID = A.AssetID
LEFT JOIN Asset_IP_Scan AIPS (NOLOCK) ON S.ScanID = AIPS.ScanID
WHERE S.ProcessStatus < 2
GROUP BY S.ScanID, S.PolicyName, S.StartTime, A.AssetName, S.TransactionGroup
ORDER BY S.StartTime ASC, S.PolicyName ASC, A.AssetName ASC
Run Code Online (Sandbox Code Playgroud)

我需要加入的是包含仍需要处理的数据的表。这些表以名称“evt_scan_”开头,然后是日期。因此,例如,完整的表名将是“evt_scan_20171222”。2017 年 12 月 22 日执行的扫描数据将在表“evt_scan_20171222”中包含数据,并且可能在接下来的几天表“evt_scan_20171223”中包含数据。所以,我首先需要我的查询来检查表是否存在,然后加入它进行计数并检查接下来的天表是否存在,加入它进行另一个计数并将 …

sql-server-2008 sql-server t-sql

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