가능한 것처럼 보입니다. 내가 권할 지 모르겠다.
하나의 대안은 데이터베이스에서 구성을 읽을 수있는 코드에서 추적 수신기를 정의하는 것입니다. 또 다른 방법은 메시지를 SQL 테이블에 로깅하고 트리거를 사용하여 알림을 활성화하는 것입니다.
또한 실제 실수로 인해 로깅이 필요한 많은 비즈니스 로직을 가진 데이터베이스에 procs가 저장되어 있는지 여부에 대해 질문해야합니다. 저는 제 데이터베이스의 비즈니스 로직을 좋아합니다.하지만 CLR에 저장된 procs는주의해야합니다.
엔터프라이즈 응용 프로그램 블록을 사용하려는 경우 편집 할 구성 파일은 C : \ Program Files \ Microsoft SQL Server \ MSSQL10.INSTANCE_NAME \ MSSQL \ Binn \ sqlservr.config가됩니다. 그러나 SQL Server는 다시 시작할 때이 파일에 값을 쓰지 않는 것 같습니다. 나는 다음과 같은 CLF의 PROC 및 UDF의이 결론에 도달 :
using System;
using System.Configuration;
using Microsoft.SqlServer.Server;
namespace LoggedClr
{
public static class AppDomainInfo
{
[SqlFunction]
public static string GetConfigFileName()
{
return AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
}
[SqlFunction]
public static string GetAppConfigValue(string key)
{
return ConfigurationManager.AppSettings[key];
}
[SqlProcedure]
public static void SetAppConfigValue(string key, string value)
{
ConfigurationManager.AppSettings[key] = value;
}
}
}
내가로드 다음과 같은 T-SQL 사용하여 실행 :
------------------------------------------------------------------------------
C:\Program Files\Microsoft SQL Server\MSSQL10.INSTANCE_NAME\MSSQL\Binn\sqlservr.config
(1 row(s) affected)
-------------------------------------------------------------------------
is a developer
(1 row(s) affected)
:
CREATE DATABASE TestAssembly
GO
USE TestAssembly
GO
ALTER DATABASE TestAssembly SET TRUSTWORTHY ON;
GO
ALTER AUTHORIZATION ON DATABASE::TestAssembly TO test
GO
DROP ASSEMBLY LoggedClr
GO
CREATE ASSEMBLY LoggedClr
from 'C:\justin''s projects\TestClr\LoggedClr\LoggedClr\bin\Debug\LoggedClr.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
GO
CREATE FUNCTION GetConfigFileName() RETURNS NVARCHAR(MAX) AS
EXTERNAL NAME LoggedClr.[LoggedClr.AppDomainInfo].GetConfigFileName
GO
CREATE FUNCTION GetAppConfigValue (@key nvarchar(max)) RETURNS nvarchar(max) AS
EXTERNAL NAME LoggedClr.[LoggedClr.AppDomainInfo].GetAppConfigValue
GO
CREATE PROCEDURE SetAppConfigValue (@key nvarchar(max), @value nvarchar(max)) AS
EXTERNAL NAME LoggedClr.[LoggedClr.AppDomainInfo].SetAppConfigValue
GO
SELECT dbo.GetConfigFileName()
EXEC dbo.SetAppConfigValue 'justin', 'is a developer'
SELECT dbo.GetAppConfigValue('justin')
이 나에게 다음과 같은 결과를 주었다를
우리는 Entlib 팀에서 SQL-CLR 환경에서 사용 된 적이 없다고 생각합니다. 그래서 당신은 여기에 새로운 지평을 걷고 있습니다. –
@Chris, 나도 추천하지 않습니다. 나는 그것을 시험해 봐야했다는 것이 너무 잘못 보였기 때문에 나는 그 예와 함께 그저 멀리까지 갔다. –