我有一个带有 PK 和唯一非聚集索引的表,如下所示:
CREATE TABLE Table1
(
Id INT IDENTITY(1,1) NOT NULL,
Field1 VARCHAR(25) NOT NULL,
Field2 VARCHAR(25) NULL,
CONSTRAINT PK_Table1 PRIMARY KEY CLUSTERED (Id ASC)
)
CREATE UNIQUE NONCLUSTERED INDEX IX_Field1_Field2 ON Table1
(
Field1 ASC,
Field2 ASC
)
WITH
(
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
)
Run Code Online (Sandbox Code Playgroud)
我有 2 个工作,我发现它们的执行时间相互重叠。它们都将相同的内容包含在INSERT此表中,并且最后开始的作业经常失败,因为它尝试将记录插入到Table1具有重复索引键值的中。
INSERT Table1
SELECT Field1, Field2
FROM …Run Code Online (Sandbox Code Playgroud) 我正在尝试(以图形方式)查看计划缓存中的大型查询计划,但遇到了 XML 在查询结果中被截断的问题。这是我正在使用的查询:
SELECT TOP 1
size_in_bytes,
query_plan
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) qp
ORDER BY size_in_bytes DESC
Run Code Online (Sandbox Code Playgroud)
我已经在 SSMS 中尝试过,当我点击结果网格中的 XML 时,我得到Unable to show XML. Unexpected end of file when parsing Name has occurred. Line 1, position 2097154.如果我复制并粘贴 XML,它确实被截断了。
我试过手动使用SET TEXTSIZE 2147483647只是因为,并没有做任何事情。(我知道这是 SQL Native Client 提供程序的默认值,只是试图强制解决这个问题)。
我试过SQLCMD从 .sql 文件运行语句并输出到文本文件,但这给我的更少。
我尝试以SQLCMD交互方式使用,:XML ON并收到此错误:
<?MSSQLError HResult="0x80004005" Source="Microsoft XML Extensions to SQL Server" Description="No description provided"?>
Run Code Online (Sandbox Code Playgroud)
该计划是 157 MB。
有什么办法可以把完整的计划拿出来让我看到吗?
假设我有一个这样的存储过程(假设表模式很好):
CREATE PROCEDURE p_MyProc
AS
INSERT MyTable SELECT Col1 FROM Table1
INSERT MyTable SELECT Col2 FROM Table2
INSERT MyTable SELECT Col3 FROM Table3
Run Code Online (Sandbox Code Playgroud)
假设这些最终成为每次可能需要几分钟的大插入,是否可以确定当前在存储过程的上下文中运行的是哪一个?
我知道如何找到正在运行的存储过程,我只是想看看是否有办法获得更细化,而无需在其中添加 PRINT 或其他跟踪语句。有没有办法让语句显示在跟踪中?
目前,我只是想从临时表中删除 Name 列为 Null 的对象,其中包含以下内容...
delete from #PulledData
where #PulledData.Name0 = NULL
Run Code Online (Sandbox Code Playgroud)
我也试过= 'NULL',= '%NULL%'等等,但似乎没有任何效果。我很感激这件事上的一些帮助。