아쉽게도 SMO는 SQLCLR을 통해 직접 호출 할 수 없습니다. 뿐만 아니라 - Microsoft.SqlServer.Smo.dll - Supported .NET Framework Libraries 목록에 없지만 특별히 허용되지 않습니다. 원하는 기능을 래핑하는 사용자 어셈블리를 만들어 "
Msg 6596, Level 16, State 1, Line 1
CREATE ASSEMBLY failed because assembly 'Microsoft.SqlServer.Smo' is a system assembly. Consider creating a user assembly to wrap desired functionality.
좋아, 그래서 시도 :
CREATE ASSEMBLY [SMO]
AUTHORIZATION [dbo]
FROM
N'C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.Smo.dll'
WITH PERMISSION_SET = UNSAFE;
반환 값 : 수동 CREATE ASSEMBLY
를 통해 그 DLL을 가져 오려고하면
, 다음과 같은 오류를 얻을 수 ". 난 그냥,
그리고 : 어셈블리가 PERMISSION_SET = UNSAFE
표시되어 있으면 당신이 얻을
Msg 6522, Level 16, State 2, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate "SmoTest":
System.Security.SecurityException: That assembly does not allow partially trusted callers.
을 :
Msg 6522, Level 16, State 2, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate "SmoTest":
System.Exception: This functionality is disabled in the SQLCLR. It is recommended that you execute from your client application.
System.Exception:
at Microsoft.SqlServer.Management.Common.ConnectionManager..ctor()
at Microsoft.SqlServer.Management.Smo.Server..ctor()
UPDATE를 어셈블리가 PERMISSION_SET = SAFE
표시되어 있으면
당신은 얻을 2007 년 1 월 MSDN 포럼에서 관련 스레드 발견 :
'microsoft.sqlserver.batchparser' is malformed or not a pure .NET assembly.
구체적으로 무엇을하려합니까? SMO에서와 마찬가지로 T-SQL에서도 쉽게 수행 할 수 있습니다. – siride
@siride 스트레이트 T-SQL에서 모든 작업을 수행 할 수 있지만 스크립팅 객체는 SMO를 사용하면 약간 쉬울 수 있습니다. [Scripter] (https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.scripter.aspx)와 [ScriptingOptions] (https://msdn.microsoft.com/en)를 확인하십시오. -us/library/microsoft.sqlserver.management.smo.scriptingoptions.aspx). –
@srutzky : 나는 그것들을 사용했고 그들은 (대단히) 훌륭합니다. 그래도 C# 도구를 써서이 작업을 수행해야한다면 어떨까요? T-SQL을 통해 수행해야하는 이유는 무엇입니까? – siride