0
두 집계 및 함수를 업데이트하고 어셈블리를 삭제하고 어셈블리를 다시 가져 오는 저장 프로 시저가 있습니다.저장 프로 시저에서 함수 만들기
내 코드 :
CREATE PROCEDURE [maint].[UpdateSqlClr]
AS
BEGIN
IF OBJECT_ID('dbo.[HistoricAnalysis]') IS NOT NULL
DROP FUNCTION [dbo].[HistoricAnalysis];
IF OBJECT_ID('dbo.[OverallStatus]') IS NOT NULL
DROP AGGREGATE [dbo].[OverallStatus];
IF OBJECT_ID('dbo.[OverallStatusBreakdown]') IS NOT NULL
DROP AGGREGATE [dbo].[OverallStatusBreakdown];
IF EXISTS
(
SELECT *
FROM sys.assemblies
WHERE [name] = 'SuperDbSqlCLR'
)
DROP ASSEMBLY [SuperDbSqlCLR];
CREATE ASSEMBLY [SuperDbSqlCLR] FROM 'd:\Super\SuperDb.Sql.CLR\SuperDb.SqlClr.dll' WITH PERMISSION_SET = SAFE;
CREATE AGGREGATE [dbo].[OverallStatus]
(@input [NVARCHAR](4000)
)
RETURNS [NVARCHAR](4000)
EXTERNAL NAME
SuperDbSqlCLR.[SuperDb.SqlClr.OverallStatus];
CREATE AGGREGATE [dbo].[OverallStatusBreakdown]
(@input [NVARCHAR](4000)
)
RETURNS [NVARCHAR](4000)
EXTERNAL NAME
[SuperDbSqlCLR].[SuperDb.SqlClr.OverallStatusBreakdown];
-- Where the GO would be in a query window
CREATE FUNCTION [dbo].[HistoricAnalysis]()
RETURNS TABLE (
[Sequence] [int] NULL,
[Text] [nvarchar](100) NULL
)
AS
EXTERNAL NAME [SuperDbSqlCLR].[SuperDb.SqlClr.UserDefinedFunctions].[HistoricAnalysis]
END
문제는, 난 그냥 쿼리 창에서 SPROC의 내용을 실행하는 GO를 추가 할 수있는 반면, SPROC의 작품은 GO 문을 좋아하지 않는 것이다와 때마다 'CREATE FUNCTION'이 일괄 처리의 유일한 문이어야한다는 구문 오류가 발생합니다.
SPROC에서이를 수행 할 수있는 방법이 있습니까?
이것은 copout이지만 : 동적 SQL에서 사용해 보셨습니까? –
그것은 copout이 아닙니다 ... 동적 SQL은 저장 프로 시저 내에서 함수를 만들 수있는 ** 유일한 ** 방법입니다. –
@ DanielA.Thompson : 그것은 논쟁이 아닙니다. 그것은 이런 종류의 일을하는 표준 방법입니다. 제 의견으로는 이상한 일입니다. 하지만 대체 생활 방식을지지합니다. –