所以我有以下的,我用它來能夠通過正則表達式匹配的東西沒有太多的併發症(我想最終做的是比這個例子更復雜,所以正則表達式是非常綜合R代碼裏面需要的,這僅僅是第一步):集成[R腳本到SELECT查詢
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的distinguishedName字符串(在這種情況下,想:「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]
到目前爲止,我還沒有成功地得到這個權利呢。任何幫助將不勝感激。
你想要的是有一個標量用戶定義函數,調用你在'acad.ADcn'中傳入函數的'sp_execute_external_script'。但是,由於你不能從函數內調用UDF,所以你運氣不好。但是,在這種情況下 - 爲什麼你要使用R for regex,難道你不能創建一個SQLCLR過程/函數來爲你做這件事嗎? –