나는 동적으로 두 개의 데이터베이스를 통해 트리거의 수를 만들려고하고 있지만이 문을 실행하면 내가 얻을 데이터베이스동적, 크로스 데이터베이스 트리거 생성
SET @SQL = 'SELECT Name FROM ' + @DB + '.sys.triggers WHERE Name = ' + ''''
+ @Table + '_DELTATrigger' + ''''
EXEC(@SQL)
IF @@RowCount > 0
BEGIN
SET @SQL = 'USE ' + @DB + '; DROP TRIGGER [dbo].[' + @Table + '_DELTATrigger]'
EXEC(@SQL)
END
SET @SQL = 'CREATE TRIGGER [dbo].[' + @Table + '_DELTATrigger]
ON [dbo].[' + @Table + ']
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
UPDATE [' + @Table + ']
SET [Delta] = 1
FROM inserted
WHERE inserted.[ID] = [' + @Table + '].[ID]
END;'
EXEC (@SQL)
을 전환 할 때 내가 만들기 트리거 문에 문제가 있어요
문제 다음과 같은 오류 8197, 수준 16, 상태 4, 절차 tblBuild_DataPlate_DELTATrigger, 줄 1
메시지 : 개체 'dbo.tblBuild_DataPlate는'이 (가) 또는 INVA하지 않습니다 이 작업을위한 뚜껑.
동적대로 작동하지 않습니다 USE 문을 포함하는 트리거를 작성 변경 트리거 당신은 완전히이 경우 데이터베이스와 객체를받을 수 없습니다
SET @SQL = 'USE ' + @DB + '; CREATE TRIGGER [dbo].[' + @Table + '_DELTATrigger]
ON [dbo].[' + @Table + ']
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
UPDATE [' + @Table + ']
SET [Delta] = 1
FROM inserted
WHERE inserted.[ID] = [' + @Table + '].[ID]
END;'
EXEC (@SQL)
Error 111, Level 15, State 1, Procedure -,
Line 1, Message: 'CREATE TRIGGER' must be the first
statement in a query batch.
첫 번째 문을이어야 만들기 다음과 같은 오류
오류 166, 수준 15, 상태 1, 프로 시저 얻을으로 -, 줄 1,
메시지 : '/ ALTER를 만들 TRIGGER '는 데이터베이스 이름을 오브젝트 이름의 접 두부로 지정하는 을 허용하지 않습니다.
동적 인 방법이 있습니까?
당신이 트리거를 만들 시도해 봤어 '+ DBNAME +' [dbo]. [+ + 테이블 + '_DELTATrigger]? –
예. 위의 세 번째 오류가 발생하면 Create Trigger 쿼리에 DB 접두사를 사용할 수 없습니다. –