我有一个查询在我们的服务器上运行大约需要 3 个小时——而且它没有利用并行处理。(大约 115 万条记录dbo.Deidentified
, 300 条记录dbo.NamesMultiWord
)。服务器可以访问 8 个内核。
UPDATE dbo.Deidentified
WITH (TABLOCK)
SET IndexedXml = dbo.ReplaceMultiWord(IndexedXml),
DE461 = dbo.ReplaceMultiWord(DE461),
DE87 = dbo.ReplaceMultiWord(DE87),
DE15 = dbo.ReplaceMultiWord(DE15)
WHERE InProcess = 1;
Run Code Online (Sandbox Code Playgroud)
和ReplaceMultiword
是一个过程定义为:
SELECT @body = REPLACE(@body,Names,Replacement)
FROM dbo.NamesMultiWord
ORDER BY [WordLength] DESC
RETURN @body --NVARCHAR(MAX)
Run Code Online (Sandbox Code Playgroud)
是呼吁ReplaceMultiword
阻止形成平行计划吗?有没有办法重写它以允许并行?
ReplaceMultiword
以降序运行,因为某些替换是其他替换的简短版本,我希望最长的匹配成功。
例如,可能有“乔治华盛顿大学”和另一个来自“华盛顿大学”。如果“华盛顿大学”比赛是第一场,那么“乔治”就会被甩在后面。
从技术上讲,我可以使用 CLR,只是我不熟悉如何使用。
performance sql-server parallelism sql-server-2016 query-performance
我有一张几百列宽的桌子。有没有办法将每一行转换为包含列标题的单个串联字符串,而不必列出查询中的每一列?
我这样做是因为列代表事件报告中的字段。我将它们重新组合在一起,以便人们可以以合乎逻辑的方式阅读报告。
我已经通过查询完成了其中的一些工作,但是为每一列都做起来很费力,而且似乎容易出错。
这是一个简短的片段,显示以我需要的格式连接的三列,在逐列方法中完成:
SELECT
Concat(
IIf(Id IS NULL, Null, Concat('Id: ' , [Id] , '\n') ) ,
IIf(StandardClientId IS NULL, Null,
Concat('StandardClientId: ' , [StandardClientId] , '\n') ) ,
IIf(ClientName IS NULL, Null,
Concat('ClientName: ' , [ClientName] , '\n') )
) AS ReportLine
FROM dbo.DataDecoded;
Run Code Online (Sandbox Code Playgroud)
谢谢
使用以下代码,我使用 csc 来编译 dll。然后我将程序集添加到 sql server 2014 使用
CREATE ASSEMBLY ReplaceMultiWord from 'd:\bcp\ReplaceMultiWord.dll' WITH PERMISSION_SET = SAFE;
Run Code Online (Sandbox Code Playgroud)
然后成功添加了第一个功能
CREATE FUNCTION dbo.ReplaceMultiWord
(@inputString AS NVARCHAR(MAX), @replacementSpec AS XML) RETURNS NVARCHAR(MAX)
AS
EXTERNAL NAME ReplaceMultiWord.UserDefinedFunctions.ReplaceMultiWord;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试添加第二个功能时
CREATE FUNCTION dbo.CanReplaceMultiWord
(@inputString AS NVARCHAR(MAX), @replacementSpec AS XML) RETURNS BIT
AS
EXTERNAL NAME ReplaceMultiWord.UserDefinedFunctions.CanReplaceMultiWord;
Run Code Online (Sandbox Code Playgroud)
我收到错误
Could not find method 'CanReplaceMultiWord' for type 'UserDefinedFunctions' in assembly 'ReplaceMultiWord'
Run Code Online (Sandbox Code Playgroud)
下面是我的代码。为什么 sql server 看不到第二个函数?
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Xml;
public partial class …
Run Code Online (Sandbox Code Playgroud)