2014-07-22 7 views
0

다음과 같이 트리거를 작성하여 UDF를 사용할 수 있는지 여부를 확인한 후 드롭하고 새 UDF를 작성한 다음 마지막으로 이름이 지정된 테이블에 사용하십시오 TableToClean.
그러나 내가 그것을하지만주는 오류를 실행하려고
스칼라 값 함수를 실행하기위한 트리거를 작성합니다. INSERT

USE [DB2] 
GO 
/****** Object: Trigger [dbo].[cleanData] Script Date: 7/22/2014 3:33:19 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[cleanData] 
ON [dbo].[TableToClean] FOR INSERT 
AS 
BEGIN 
      SET NOCOUNT ON 
      IF OBJECT_ID('[dbo].[cleanStyleData]') IS NOT NULL 
      DROP FUNCTION cleanStyleData 
      GO 

     CREATE FUNCTION [dbo].[cleanStyleData] (@StyleText VARCHAR(MAX)) 
     RETURNS VARCHAR(MAX) 
     AS BEGIN 
      DECLARE @Start INT 
      DECLARE @End INT 
      DECLARE @Length INT 
      SET @Start = CHARINDEX('<style>', @StyleText) 
      SET @End = CHARINDEX('</style>', @StyleText, @Start) 
      SET @Length = (@End - @Start) + 1 
      WHILE @Start > 0 AND @End > 0 AND @Length > 0 
       BEGIN 
        SET @StyleText = STUFF(@StyleText, @Start, @Length, '') 
        SET @Start = CHARINDEX('<style>', @StyleText) 
        SET @End = CHARINDEX('</style>', @StyleText, @Start) 
        SET @Length = (@End - @Start) + 1 
       END 
      RETURN REPLACE(REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(@StyleText)), '$', ''), '£', ''), '€', ''), '&#8629;', '') 
     END 

     IF OBJECT_ID('[dbo].[cleanScriptData]') IS NOT NULL 
     DROP FUNCTION cleanScriptData 
     GO 

     CREATE FUNCTION [dbo].[cleanScriptData] (@ScriptText VARCHAR(MAX)) 
     RETURNS VARCHAR(MAX) 
     AS BEGIN 
      DECLARE @Start INT 
      DECLARE @End INT 
      DECLARE @Length INT 
      SET @Start = CHARINDEX('<script>', @ScriptText) 
      SET @End = CHARINDEX('</script>', @ScriptText, @Start) 
      SET @Length = (@End - @Start) + 1 
      WHILE @Start > 0 AND @End > 0 AND @Length > 0 
       BEGIN 
        SET @ScriptText = STUFF(@ScriptText, @Start, @Length, '') 
        SET @Start = CHARINDEX('<script>', @ScriptText) 
        SET @End = CHARINDEX('</script>', @ScriptText, @Start) 
        SET @Length = (@End - @Start) + 1 
       END 
      RETURN REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(@ScriptText)), '=', ''), '\', ''), '||', '') 
     END 

     UPDATE [DB2].[dbo].[TableToClean] 
     SET [DA_ArticleDetails] = [dbo].[cleanStyleData] ([DA_ArticleDetails]) 

     UPDATE [DB2].[dbo].[TableToClean] 
     SET [DA_ArticleDetails] = [dbo].[cleanScriptData] ([DA_ArticleDetails]) 

END 

working- 아닙니다.

+1

왜 지구에 이러한 기능이 트리거에 의해 다시 작성해야합니까? –

+0

또한이 테이블에'