Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此SQL视图能否阻止其他活动?_Sql_Sql Server - Fatal编程技术网

此SQL视图能否阻止其他活动?

此SQL视图能否阻止其他活动?,sql,sql-server,Sql,Sql Server,我们的客户抱怨以下SQL视图导致其主信息系统阻塞。我需要找出这是不是真的(因为他们当时也在做其他事情,他们不确定),我想解决这个问题 背景:以下是简化的遗留SQL代码,用于从安装在Microsoft SQL Server 2008上的Navision(现在的Microsoft Dynamics Nav或其名称)提取数据 该视图用于从SSIS包中将数据提取到具有固定列宽的txt文件。生成的文件将导入到其他与Navision没有直接关系的软件中。该包通过SQL Server代理作为作业启动。运行大约

我们的客户抱怨以下SQL视图导致其主信息系统阻塞。我需要找出这是不是真的(因为他们当时也在做其他事情,他们不确定),我想解决这个问题

背景:以下是简化的遗留SQL代码,用于从安装在Microsoft SQL Server 2008上的Navision(现在的Microsoft Dynamics Nav或其名称)提取数据

该视图用于从SSIS包中将数据提取到具有固定列宽的txt文件。生成的文件将导入到其他与Navision没有直接关系的软件中。该包通过SQL Server代理作为作业启动。运行大约需要10分钟

如何确定数据提取过程是否会阻止其他活动?选择是否总是自动阻止?如果是,是否可以改进视图以避免阻塞

CREATE VIEW [A_Company$my_view] AS
SELECT ItemLedgerEntry.[Document No_] AS DocumentNo,
    ...
    CAST(CONVERT(DECIMAL(14,2),
                 ROUND((SELECT SUM([Sales Amount (Actual)])
                        FROM [A_Company$Value Entry] AS ValueEntry
                        WHERE ValueEntry.[Item Ledger Entry No_] = ItemLedgerEntry.[Entry No_]),
                       2)) AS VARCHAR(14)) AS SalesAmount,
    ...
    Dim1.[Dimension Value Code] AS Dim1,
    ...
    COALESCE((select top 1 [Group Code]
              from [A_Company$Statistic Group Accom]
              where [Type] = 1
                  and [Sales Code] = ItemLedgerEntry.[Source No_]
                  and [Ship-to Code] = ItemLedgerEntry.[Source No_ 3]
                  and [Starting Date] <= ItemLedgerEntry.[Posting Date]
              order by [Starting Date] desc),
             (select top 1 [Group Code]
              from [A_Company$Statistic Group Accom]
              where [Type] = 1
                  and [Sales Code] = ItemLedgerEntry.[Source No_]
                  and [Ship-to Code] = ''
                  and [Starting Date] <= ItemLedgerEntry.[Posting Date]
              order by [Starting Date] desc), ''
              ) as StatisticGroup

FROM [A_Company$Item Ledger Entry] AS ItemLedgerEntry
    LEFT OUTER JOIN [A_Company$Item] AS Item ON (Item.[No_] = ItemLedgerEntry.[Item No_])
    ...
    LEFT OUTER JOIN [A_Company$Salesperson_Purchaser] AS Salesperson_Purchaser
                 ON (Salesperson_Purchaser.[Code] = Customer.[Salesperson Code])

    LEFT OUTER JOIN [A_Company$Ledger Entry Dimension] AS Dim1
      ON (ItemLedgerEntry.[Entry No_] = Dim1.[Entry No_]) AND (Dim1.[Table ID] = 32) AND
         (Dim1.[Dimension Code] = (SELECT [Shortcut Dimension 1 Code] FROM [A_Company$General Ledger Setup]))
    ...
    LEFT OUTER JOIN [A_Company$Ledger Entry Dimension] AS Dim8
      ON (ItemLedgerEntry.[Entry No_] = Dim8.[Entry No_]) AND (Dim8.[Table ID] = 32) AND
         (Dim8.[Dimension Code] = (SELECT [Shortcut Dimension 8 Code] FROM [A_Company$General Ledger Setup]))

WHERE ((ItemLedgerEntry.[Invoiced Quantity] <> 0)
      AND (ItemLedgerEntry.[Entry Type] = 1))
CREATE VIEW[A_Company$my_VIEW]作为
选择ItemLedgerEntry.[文档编号]作为文档编号,
...
转换(十进制(14,2),
四舍五入((选择总和([销售金额(实际)])
从[A_公司$Value Entry]作为ValueEntry
其中ValueEntry.【项目分类账分录编号】=项目分类账分录【分录编号】,
2) )作为VARCHAR(14))作为销售额,
...
Dim1。[尺寸值代码]作为Dim1,
...
合并((选择前1[组码]
来自[A_公司$Statistic Group Accom]
其中[Type]=1
和[Sales Code]=ItemLedgerEntry。[源代码]
和[Ship to Code]=ItemLedgerEntry。[源代码3]

在某种程度上,这取决于其他进程正在做什么。它们请求什么类型的锁

您可以尝试在上述查询中的每个表定义之后添加带有(Nolock)


谢谢。我一直在等待(NOLOCK)
确认
。事实是,数据不一致的情况非常罕见,即使发生,也是无害的。我想询问更多细节。有没有更好的地方讨论完整的代码?非常感谢!祝您有一个愉快的一天。
FROM [A_Company$Item Ledger Entry] AS ItemLedgerEntry WITH (NOLOCK)