와일드 카드를 사용하여 테이블 목록을 작성한 다음 트리거에 일부 열 이름을 추가하여 기존 트리거를 업데이트하려는 많은 트리거가 있습니다. 열 이름은 각 트리거에서 동일하지만 테이블의 목록을 작성하는 방법이나 단일 변경 트리거 문에서 목록을 반복하는 방법이 명확하지 않습니다. 나는 커서를 사용해야한다고 가정합니다.트리거를 일괄 처리하는 방법은 무엇입니까?
답변
"모든 트리거에 this code
을 추가하십시오"(또는 그 밖의 다른 객체 유형) 마술 지팡이가 없습니다.
많은 개체 유형의 경우 일괄 편집의 경우 개체 탐색기 정보와 해당보기 내에서의 정렬 및/또는 필터링을 사용하여 여러 개체에 대한 스크립트를 신속하게 생성 할 수 있습니다. 예를 들어 개체 탐색기에서 "저장 프로 시저"를 강조 표시하면 개체 탐색기 정보에 모두 나열되고 여러 개체를 선택하고 마우스 오른쪽 단추로 클릭 한 다음 저장 프로 시저를 스크립트로 저장> CREATE To>
트리거 테이블 아래에 중첩 된 경우이 작업을 수행하는 편리한 방법이 없습니다 (데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업> 스크립트 생성을 선택하면 엔터티 유형이 트리거되지 않습니다). 당신이 한 번 한 후, 복사 위쪽 창에 붙여 넣습니다
SET NOCOUNT ON;
SELECT OBJECT_DEFINITION([object_id])
+ CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
FROM sys.triggers
WHERE type = 'TR';
당신은 출력을 수행 할 수 있습니다하지만 당신은 (이 작업을 실행할 때 Management Studio에서 Results to Text
을 할 것입니다) 아주 쉽게 메타 데이터에서 스크립트를 당길 수 각 트리거에 새 코드를 추가 한 경우 작업을 조금 더 수행해야합니다. 'ALTER TRIGGER'
에 대해 'CREATE TRIGGER'
을 검색/교체하십시오. 쿼리의 일부로이 작업을 수행 할 수도 있지만 일관된 코딩 규칙을 사용하는 작성자에게 의존합니다. 일부 트리거는 다음과 같을 수 있습니다. ...
create trigger
... 손으로 일부 마사지해야 할 수도 있습니다.
특정 테이블 집합에만 관심이있는 경우 위의 쿼리를 필터링 할 수도 있습니다. 예를 들어, 단지 Sales
로 시작하는 테이블과 연관된 트리거를 변경하는 당신은 말할 수 :
AND OBJECT_NAME(parent_id) LIKE N'Sales%';
또는 단지 Person
스키마의 테이블 : 어쨌든
AND OBJECT_SCHEMA_NAME(parent_id) = N'Person';
을 당신이 필요한 모든 조정을 일단 스크립트, 그냥 실행할 수 있습니다. 모든 단일 테이블을 확장하고 해당 트리거에 대한 스크립트를 생성하는 것보다 훨씬 쉽습니다.
개체 이름 지정 규칙이 일관성없는 복잡한 트리거를 많이 사용하는 Aarons 제안 외에, 나는 3 개월 동안 내가 한 것을 기억할 수 있도록 뭔가를 요리하려고 시도했습니다. 즐겨. SP를 만들거나 변경 한 다음 매개 변수없이 실행합니다.
CREATE PROCEDURE SP_ALTER_CONTOUR_TRIGS
--sp to bulk edit many triggers at once
--NO ERROR HANDLING!
AS
DECLARE
@sql VARCHAR(500),
@tableName VARCHAR(128),
@triggerName VARCHAR(128),
@tableSchema VARCHAR(128)
DECLARE triggerCursor CURSOR
FOR
SELECT
so_tr.name AS TriggerName,
so_tbl.name AS TableName,
t.TABLE_SCHEMA AS TableSchema
FROM
sysobjects so_tr
INNER JOIN sysobjects so_tbl ON so_tr.parent_obj = so_tbl.id
INNER JOIN INFORMATION_SCHEMA.TABLES t
ON
t.TABLE_NAME = so_tbl.name
WHERE
--here's where you want to build filters to make sure you're
--targeting the trigs you want edited
--BE CAREFUL!
--test the select statement first against sysobjects
--to see that it returns what you expect
so_tr.type = 'TR'
and so_tbl.name like '%contours'
and so_tr.name like'%location_id'
ORDER BY
so_tbl.name ASC,
so_tr.name ASC
OPEN triggerCursor
FETCH NEXT FROM triggerCursor
INTO @triggerName, @tableName, @tableSchema
WHILE (@@FETCH_STATUS = 0)
BEGIN
--insert alter statement below
--watch out for cr returns and open and close qoutes!
--seems to act finicky if you don't use schema-bound naming convention
SET @sql = '
ALTER TRIGGER ['+ @tableSchema +'].['
+ @triggerName + '] ON ['+ @tableSchema +'].['
+ @tableName + ']
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT ['+ @tableSchema +'].['+ @tableName + ']
(OBJECTID, Contour, Type, Shape, RuleID, Override)
SELECT
a.OBJECTID, a.Contour, a.Type, a.Shape, a.RuleID, a.Override
FROM
(SELECT
OBJECTID, Contour, Type, Shape, RuleID, Override
FROM inserted)
AS a
END
'
PRINT 'Executing Statement - '+ @sql
EXECUTE (@sql)
FETCH NEXT FROM triggerCursor
INTO @triggerName, @tableName, @tableSchema
END
CLOSE triggerCursor
DEALLOCATE triggerCursor
- 1. mongoDB로 문서 검색을 일괄 처리하는 방법은 무엇입니까?
- 2. jQuery에서 ajax 요청을 일괄 처리하는 방법은 무엇입니까?
- 3. 일련의 Python 스크립트를 일괄 처리하는 방법은 무엇입니까?
- 4. 트리거를 만드는 방법은 무엇입니까?
- 5. 요청을 대기열에 넣고 일괄 적으로 처리하는 시스템을 설계하는 방법은 무엇입니까?
- 6. Mac에서 pngquant로 일괄 처리하는 방법
- 7. sqlite3에서 트리거를 만드는 방법은 무엇입니까?
- 8. informix에서 트리거를 만드는 방법은 무엇입니까?
- 9. 업데이트 트리거를 만드는 방법은 무엇입니까?
- 10. MySQL 트리거를 만드는 방법은 무엇입니까?
- 11. 트리거를 사용하여 계산하는 방법은 무엇입니까?
- 12. sharepoint에서 트리거를 만드는 방법은 무엇입니까?
- 13. DynamoDBContext를 사용하여 결과를 일괄 처리하는 방법
- 14. 일괄 업데이트를 수행하는 방법은 무엇입니까?
- 15. 뷰를 일괄 업데이트하는 방법은 무엇입니까?
- 16. DomainContext를 처리하는 방법은 무엇입니까?
- 17. UnsatisfiedLinkError를 처리하는 방법은 무엇입니까?
- 18. FileNotFoundException을 처리하는 방법은 무엇입니까?
- 19. 포인터로지도를 처리하는 방법은 무엇입니까?
- 20. System.CannotUnloadAppDomainException을 처리하는 방법은 무엇입니까?
- 21. ArgumentOutOfRangeException을 처리하는 방법은 무엇입니까?
- 22. StreamReader를 처리하는 방법은 무엇입니까?
- 23. Eclipse에서 Java 패키지를 일괄 처리하는 방법
- 24. QuickTime에서 URL을 일괄 처리하고 비디오를 디스크에 일괄 저장하는 방법은 무엇입니까?
- 25. mysql에서 동적 값으로 트리거를 설정하는 방법은 무엇입니까?
- 26. DBD :: SQLite로 테이블 트리거를 만드는 방법은 무엇입니까?
- 27. 이런 종류의 SQL 트리거를 만드는 방법은 무엇입니까?
- 28. wpf 데이터 트리거를 새로 고치는 방법은 무엇입니까?
- 29. DB2 9.7의 스키마에서 트리거를 검색하는 방법은 무엇입니까?
- 30. 트리거를 사용하여 삭제를 방지하는 방법은 무엇입니까?
Aaron 나는 당신의 제안을 좋아하고 메모장에서 함께 뭔가를 해킹 할 수있었습니다. ++ 어디서 코드 블록을 찾아 교체하고 교체해야하는지 알려줍니다. sys.triggers에서 선택한 항목이 실제로 도움이되었습니다. '일관된 코딩 규칙'과 같이 다루기 위해 와일드 카드를 추가 할 수 있습니다. 그러나 이전 게시물에서 조언을 얻었고 SP를 작성하여 나 자신 (및 다른 DB 개발자)이 장래에 일괄 편집을 자동화 할 수 있도록했습니다. – tpcolson