【发布时间】:2018-02-08 05:04:18
【问题描述】:
所以我有以下集成的 R 代码,我使用它能够通过正则表达式匹配内容而没有太多复杂性(我最终想要做的比这个例子更复杂,所以非常需要正则表达式,这只是第一步):
DECLARE @in_adcn nvarchar(500)
DECLARE @out_ou nvarchar(500)
SET @in_adcn = N'CN=Surname\, Firstname (asdf),OU=999,OU=Department2,OU=Fixed,OU=Fixed,DC=Fixed,DC=Fixed,DC=Fixed'
SET @out_ou = N''
-- Extract department name from AD OU string
EXEC sp_execute_external_script @language=N'R',
@script = N'
pat = "^.+OU=([^,]+),OU=Fixed,OU=Fixed,DC=Fixed,DC=Fixed,DC=Fixed$";
m <- gsub(pat, "\\1", regmatches(in_adcn1, gregexpr(pat, in_adcn1))[[1]]);
out_ou1 <- m;',
@params = N'@in_adcn1 varchar(500), @out_ou1 varchar(500) output',
@in_adcn1 = @in_adcn,
@out_ou1 = @out_ou OUTPUT
WITH RESULT SETS NONE;
SELECT @out_ou;
GO
这很好用,它从 AD distinctName 字符串返回我想要的内容(在本例中:“Department2”)。
现在我想要这个 SELECT 查询中的输出字符串(R 脚本的输入字符串是 acad.ADCn):
SELECT
acad.ADCn,
(
--<here should be the code that returns the string from the R script above>
) AS Departmentname,
acad.NBAccountName,
acb.eMail
FROM
MyDB.dbo.AccountTable AS acad
LEFT JOIN
MyDB.dbo.AddressTable AS acb
ON
acad.[ObjectID]
= acb.[ObjectID]
到目前为止,我还没有设法做到这一点。任何帮助将不胜感激。
【问题讨论】:
-
您希望有一个标量用户定义函数调用
sp_execute_external_script,您将acad.ADcn传递给函数。但是,由于您不能从函数内部调用 UDF,因此您很不走运。但是,在这种情况下 - 为什么要将 R 用于正则表达式,您不能创建一个 SQLCLR 过程/函数来为您执行此操作吗?
标签: sql-server r tsql sql-server-2016