标签: sql-server

如何从执行计划中提取依赖表的列表?

有没有办法提取查询中使用的表和视图的完整列表?

我需要复制数据库的一部分,以便在长查询运行时避免锁定表。

我有执行计划。是否可以提取查询涉及的所有数据库对象?

sql-server execution-plan

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

为什么SQL函数总是返回空结果集?

下面function我写了接受xml并返回table结果。

CREATE FUNCTION FunctionTest(@ID INT,@XML_Details xml)
RETURNS @RESULT TABLE
(
    Value1 INT,
    Value2 INT
)
AS
BEGIN
    DECLARE @tbl_Xml_Result Table
    (
        Value1 INT,
        Value2 INT
    )

    INSERT INTO @RESULT(Value1,Value2)
    SELECT 
        l.v.value('Value2[1]','INT'),
        l.v.value('Value1[1]','INT')
    FROM @XML_Details.nodes('/Listings/listing')l(v)
    RETURN
END
Run Code Online (Sandbox Code Playgroud)

以下是我用来运行上面的代码,function但它总是返回Empty结果。

DECLARE @tbl_Xml_Result Table
(
        Value1 INT,
        Value2 INT
)
INSERT INTO @tbl_xml_Result
values(1,2),(2,3),(3,4),(4,5),(5,6)


DECLARE @xml_Temp xml

SET @xml_Temp = (   SELECT * 
                    FROM @tbl_xml_Result
                    FOR XML PATH('Listing'),ROOT('Listings')
                )

DELETE FROM @tbl_xml_Result
INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

xml sql-server sql-server-2012

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

估计行数 > 实际行数是一个需要担心的问题吗?

我有一个表格[order],其中一个简单的选择以一种奇怪的方式显示了估计行数和实际行数之间的主要差异。

在这种情况下,一般估计行数与实际行数相比偏斜,这完全具有讽刺意味。此外,“执行次数”为 1。

在此处输入图片说明

询问 :

SELECT 
ord.paymentmode AS [HowTheyPaid],
ord.id AS [OrderId],
ord.ISBackEndSystemMigrated,
ord.ISDuplicate,
ord.ISMerged
FROM 

DedicatedDentalPlans_Stage.dbo.[order] ord
WHERE 
ISBackEndSystemMigrated=0 
AND ISDuplicate = 1
Run Code Online (Sandbox Code Playgroud)

桌子

USE [DedicatedDentalPlans_Stage]
GO

IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_Order_ISBackEnd]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[Order] DROP CONSTRAINT [DF_Order_ISBackEnd]
END

GO

IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF__Order__ISDuplica__382F5661]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[Order] DROP CONSTRAINT [DF__Order__ISDuplica__382F5661]
END

GO

IF  EXISTS (SELECT * …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server t-sql execution-plan

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

将表 UDT 传递给表函数时强制执行正确的执行计划

我有一个标量函数,它返回一个大的 XML,它是通过一堆发票创建的。

可以使用几种不同的方法计算要提供给函数的确切发票列表,但函数每次都是相同的。出于这个原因,我声明了一个用户定义的表类型来包含表中的主键eInvoice.Header并将其传递给函数。这样我就可以有几个不同的函数来决定要处理哪些发票,并且只有一个函数可以实际生成 XML:

create function eInvoice.GetRelevantLinesInOneWay()
returns table ...

create function eInvoice.GetRelevantLinesInAnotherWay()
returns table ...

create function eInvoice.GetXML(@lines eInvoice.InvoicePrimaryKeys readonly)
returns xml
as
begin
    declare @x xml;

    with xmlnamespaces(N'important namespace' as pro)
    select @x = (
        select
            ...
        from
            eInvoice.Header h
            inner join @lines l on h.ST_PRIMARY = l.invoice_row_id
        for xml path(N'pro:Import'), type
    );

    return @x;
end;
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种设置已被证明是非常脆弱的。

通常@lines包含大约 150 行(大约1min eInvoce.Header)。正确的执行计划是在 上使用索引查找ST_PRIMARY,当我将 的主体eInvoice.GetXML作为临时查询执行时,总是会发生这种情况。

然而,当我将它存储为一个函数时,它会按预期工作一段时间,然后发生了一些事情(太多行@lines,比如大约300 …

performance sql-server execution-plan sql-server-2012 table-valued-parameters query-performance

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

长时间运行的 SELECT 查询失败,因为 SQL SERVER 上的 DELETE 导致死锁受害者 - 为什么,以及如何避免这种情况?

首先 1 个线程从表中选择大量数据。

然后,在 SELECT 查询尚未完成之前,另一个线程从该表中删除数据。

它导致 SELECT 查询失败,错误 errorCode=1205 sqlState=40001 和发生死锁的消息。

我认为第二个事务必须等到第一个事务完成,或者第一个事务必须在没有第二个事务所做更改的情况下返回数据。我怎样才能避免这种情况?

我无法改变交易的顺序或以某种方式控制它们(应用程序的用户很多,他们可以随时以任何顺序做任何他们想做的事情)。为什么会发生?

查询是这样的(我对它们进行了一些混淆):

SELECT distinct P.pID, (LastNAME+' '+FirstName+' '+SurName) as NAME, 'person' as Type, CA.OrgName, PC.personemail as Email
FROM Persons P
INNER JOIN WORK PW ON (P.mainwork = PW.pwId)
INNER JOIN CONTACT PC ON (PC.pID = P.pID)
LEFT OUTER JOIN ORG CA ON (CA.orgId = PW.orgId)
WHERE (P.Status = ?)
Run Code Online (Sandbox Code Playgroud)

DELETE FROM persons WHERE id = 1234
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock parallelism transaction

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

为什么不先进行完整备份就不能进行日志备份?

我已经使用 FULL 恢复模型创建了一个新数据库。现在我试图在没有首先进行完整备份的情况下进行日志备份。

我知道 SQL Server 不允许我们这样做,但我想知道SQL Server为什么阻止它?

以下是我用于测试目的的脚本:

CREATE DATABASE TESTING
GO
BACKUP LOG TESTING TO DISK='G:\TESTING_LOG.TRN'
Run Code Online (Sandbox Code Playgroud)

sql-server backup transaction-log

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

简单恢复数据库以节省空间

这个旧的 SQL Server 2000 实例有一个 14 Gb 的数据磁盘和一个 30 Gb 的备份磁盘。

即使它很旧,它仍然有大量用户进行交易,因此该服务器上唯一数据库的日志文件每天都会填满数据驱动器。

我想我会把它放在简单的恢复中并刷新事务日志,但我想知道它会产生什么影响。

如果没有 T-log,您就不能使用备份恢复到完整备份时间以外的任何其他时间点,对吗?在对数据库进行此类更改时,除此之外我应该注意哪些最重要的影响?当我不生成 t-log 时,除了丢失一天的数据(每天备份到磁带)之外,还有什么可能发生?

提前致谢

sql-server sql-server-2000 recovery-model

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

如何从 table1 上的触发器将值插入 table2

我有 2 个带有列名的表WHO,我正在使用这 2 个表创建一个视图,其中FSwho.who = FStasks.who.

如果我在FStaskswhere 中输入一条新记录FStasks.who = LIZ,但我的FSwho.who表上没有记录,那么触发器应该插入LIZ到我的表中。

使用下面的代码,我得到的错误是

无法绑定多部分标识符“fs_tasks.WHO”。(我也试过inserted.who

我搜索了互联网,我遇到的大多数解决方案都是关于更改同一张桌子上的值。如何将值插入到完全不同的表中?

ALTER TRIGGER [dbo].[FS_TASKS_TRIG]
   ON  [dbo].[FS_TASKS]
   AFTER INSERT,UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

DECLARE @Action as char(1);
    SET @Action = (CASE 
        WHEN EXISTS(SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED) THEN 'U'  -- Set Action to Updated.
        WHEN EXISTS(SELECT * FROM INSERTED) THEN 'I'  -- Set Action to Insert.
        WHEN EXISTS(SELECT * …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

浏览时 SSAS 层次结构重复

多维数据集中的维度为我们提供了重复项,处理多维数据集时没有错误,但是在浏览多维数据集时我们可以看到重复项。

我们的维度中有一个层次结构,层次结构像Country -- State -- Area.

在 DB 中,维度数据如下所示。

+---------+------------+-----------+
| Country |   State    |  Subarea  |
+---------+------------+-----------+
| India   | Karnataka  | Bangalore |
| India   | Telangana  | Hyderabad |
+---------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)

现在,当使用属性 Country 浏览多维数据集时,我们会看到 country 下的 2 个成员为“India”,当针对该属性选择度量时,销售额在这两个值之间破碎。

我们可以做任何工作来避免这个问题吗?

sql-server ssas dimensional-modeling

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

SQL Server 2016 插件不起作用

最近我在我的 PC 上安装了 SQL Server 2016。

这是我的服务器的详细信息:

Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64)
2016 年 3 月 10 日 16:49:45
版权所有 (c)
Windows 10 Pro 6.3(内部版本10586:)上的Microsoft Corporation企业评估版(64 位)

在我的 PC 上安装服务器后,尝试安装以下插件

  1. 适用于 SSMS V3.6.1 的 SQL 漂亮打印机插件
  2. SQLSentry 计划浏览器

问题:

  1. SQL Pretty Printer甚至没有安装它会抛出错误,例如

    在此处输入图片说明

    但是SQL Pretty Printer站点说它适用于 SQL Server 2016,您可以查看链接。

    在此处输入图片说明

  2. 下一个SQLSentry 计划资源管理器已成功安装,但插件未显示在SSMS.

版本: v2.8(内部版本 9.0.9252.0)

在此处输入图片说明

谁能帮我解决这个问题。请注意,两者都在 SQL Server 2014 中完美运行。

sql-server ssms plugins sql-server-2016 windows-10

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