SQL Server가 있는 테이블과 관련된 모든 트리거를 찾는 방법은 무엇입니까?
SQL Server에서 테이블에 대한 트리거를 생성했는데 이 트리거가 사용 가능합니다.
문제는 다음과 같습니다.어떻게 찾아서 수정합니까?
이 쿼리를 사용하여 트리거를 찾습니다.
select * from sys.triggers
이렇게 하면 모든 트리거를 찾을 수 있지만, 트리거를 열고 변경하는 방법은 무엇입니까?
SSMS를 사용하여 간단히 이 작업을 수행할 수 있습니다. 테이블 이름으로 이동하여 트리거 노드를 확장하면 해당 테이블과 연결된 트리거 목록을 볼 수 있습니다.마우스 오른쪽 버튼을 클릭하여 트리거를 수정합니다.
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%YourTableName%'
이렇게 하면 지정된 테이블과 관련된 모든 트리거를 나열할 수 있습니다.
이것은 유용할 수 있습니다.
SELECT
t.name AS TableName,
tr.name AS TriggerName
FROM sys.triggers tr
INNER JOIN sys.tables t ON t.object_id = tr.parent_id
WHERE
t.name in ('TABLE_NAME(S)_GOES_HERE');
이렇게 하면 테이블 이름을 플러그인하기만 하면 쿼리가 필요한 모든 트리거를 가져옵니다.
select m.definition from sys.all_sql_modules m inner join sys.triggers t
on m.object_id = t.object_id
여기서는 정의를 복사하고 트리거를 변경하기만 하면 됩니다.
그렇지 않으면 SSMS로 이동하여 DB를 확장하고 Programmability(프로그램성)에서 Database Trigger(데이터베이스 트리거)를 마우스 오른쪽 버튼으로 클릭한 다음 Modify(수정)를 클릭하면 변경할 수 있습니다.
sp_help트리거를 사용하여 연결된 테이블의 트리거 목록을 찾습니다.
테이블에서 트리거 찾기:
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TableName%'
테이블 참조가 있는 저장 프로시저를 찾을 수 있습니다.
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%yourtablename%'
select B.name
from sys.objects A
join sys.triggers B
on A.object_id = B.parent_id
where A.name ='Table_name' /*Table Name*/
통과하다
SQL Server 데이터베이스의 모든 트리거를 테이블 이름 및 테이블 스키마와 함께 나열해야 함
이 URL에는 특정 테이블과 연결된 트리거 목록을 가져올 수 있는 쿼리 집합이 있습니다.
sqlserver에서 작업 중인 것으로 생각됩니다. 다음은 수정 트리거를 가져오는 단계입니다.
트리거 수정 방법
서버 그룹을 펼친 후 서버를 펼칩니다.
데이터베이스를 확장하고 트리거가 포함된 테이블이 속한 데이터베이스를 확장한 다음 테이블을 클릭합니다.
세부 정보 창에서 트리거가 있는 테이블을 마우스 오른쪽 단추로 클릭하고 모든 작업을 가리킨 다음 트리거 관리를 클릭합니다.
Name(이름)에서 트리거의 이름을 선택합니다.
필요에 따라 텍스트 필드에서 트리거의 텍스트를 변경합니다.Ctrl+Tab을 눌러 SQL Server Enterprise Manager 트리거의 텍스트를 들여씁니다.
트리거의 구문을 확인하려면 구문 확인을 클릭합니다.
이 쿼리를 사용하면 모든 테이블과 모든 뷰에서 모든 트리거를 찾을 수 있습니다.
;WITH
TableTrigger
AS
(
Select
Object_Kind = 'Table',
Sys.Tables.Name As TableOrView_Name ,
Sys.Tables.Object_Id As Table_Object_Id ,
Sys.Triggers.Name As Trigger_Name,
Sys.Triggers.Object_Id As Trigger_Object_Id
From Sys.Tables
INNER Join Sys.Triggers On ( Sys.Triggers.Parent_id = Sys.Tables.Object_Id )
Where ( Sys.Tables.Is_MS_Shipped = 0 )
),
ViewTrigger
AS
(
Select
Object_Kind = 'View',
Sys.Views.Name As TableOrView_Name ,
Sys.Views.Object_Id As TableOrView_Object_Id ,
Sys.Triggers.Name As Trigger_Name,
Sys.Triggers.Object_Id As Trigger_Object_Id
From Sys.Views
INNER Join Sys.Triggers On ( Sys.Triggers.Parent_id = Sys.Views.Object_Id )
Where ( Sys.Views.Is_MS_Shipped = 0 )
),
AllObject
AS
(
SELECT * FROM TableTrigger
Union ALL
SELECT * FROM ViewTrigger
)
Select
*
From AllObject
Order By Object_Kind, Table_Object_Id
select o1.name as trigger_name,o2.name as table_name from sys.objects o1
join sys.objects o2 on
o1.parent_object_id=o2.object_id
where o1.type='TR'
and o2.name='my_table'
아래 쿼리를 통해 데이터베이스와 관련된 모든 트리거를 볼 수 있습니다.
select * from sys.triggers
오픈 트리거의 경우 아래 구문을 사용할 수 있습니다.
sp_helptext 'dbo.trg_InsertIntoUserTable'
아래에 많은 간단한 쿼리가 있습니다.
select (select [name] from sys.tables where [object_id] = tr.parent_id ) as TableName ,* from sys.triggers tr
information_delays에서 *를 선택합니다.트리거;
select t.name as TriggerName,m.definition,is_disabled
from sys.all_sql_modules m
inner join
sys.triggers t
on m.object_id = t.object_id
inner join sys.objects o
on o.object_id = t.parent_id
Where o.name = 'YourTableName'
지정된 테이블의 모든 트리거가 표시됩니다.
사용 시도:
select * from sys.objects where type='tr' and name like '%_Insert%'
트리거 이름을 sp_help로 입력하여 트리거를 열 수 있습니다.
언급URL : https://stackoverflow.com/questions/12346914/how-to-find-all-trigger-associated-with-a-table-with-sql-server
'programing' 카테고리의 다른 글
장고에서 단일 쿼리 세트로 레코드를 선택하고 업데이트하는 방법은 무엇입니까? (0) | 2023.08.10 |
---|---|
PyCharm 플러그인으로 IntelliJ IDEA에서 Python 인터프리터를 구성하려면 어떻게 해야 합니까? (0) | 2023.08.10 |
SQL Server 쿼리에서 정수를 10진수로 변환하는 방법은 무엇입니까? (0) | 2023.08.10 |
C에서 소켓 연결 상태를 찾는 방법은 무엇입니까? (0) | 2023.08.05 |
난수 리스트 생성, 합계 1 (0) | 2023.08.05 |