XXX_JOURNAL
과 같이 테이블을 동적으로 생성했습니다. 여기서 XXX
- 테이블 접두사 (변수)이고 _JOURNAL
-은 테이블 이름에서 상수입니다.MS SQL 쿼리에서 테이블 이름 변수
- 를 만드는 방법 : 나는 두 가지 어려움이 그래서 여기
CREATE TRIGGER triggerName ON %_JOURNAL FOR UPDATE AS UPDATE XXX_JOURNAL SET COMPANY_ID = LEFT(tableName,3) //tableName = current table (XXX_JOURNAL) WHERE ID = ID FROM inserted
:
나는하지 특정 테이블에 데이터베이스에 UPDATE 트리거를 만들고 변수로 테이블 이름 (접두사)를 사용하여 필요 모든 테이블에 대해 하나의 트리거
LIKE %_JOURNAL
? - 현재 테이블의 키워드로 테이블 이름을 사용하는 방법은 무엇입니까?
구문에 많은 실수가 있음을 알고 있습니다. 예를 들어 트리거 생성시 테이블 이름으로 '%_JOURNAL'
을 사용할 수 없습니다. 그것은 단지 설명을위한 것입니다. 나는 미래에 모든 동적으로 생성 된 테이블에 대해 하나의 트리거를 생성해야합니다.
아이디어가 있으십니까?
CREATE PROCEDURE TriggerCreationForJournals
@XXX as nvarchar(3)
AS
BEGIN
DECLARE @sql nvarchar(max),
@triggerName nvarchar(max) = @XXX + N'_JOURNAL_UPDATE',
@objectCheck int,
@checkSQL nvarchar(max),
@params nvarchar(max) = N'@objectCheck int OUTPUT'
SELECT @checkSQL = N'SELECT @objectCheck = OBJECT_ID(N'''[email protected]+''')'
EXEC sp_executesql @checkSQL, @params, @objectCheck = @objectCheck OUTPUT
IF @objectCheck IS NULL
BEGIN
SELECT @sql = N'
CREATE TRIGGER '+QUOTENAME(@triggerName)+' ON ['[email protected]+'_JOURNAL]
FOR UPDATE
AS
UPDATE x
SET COMPANY_ID = '''[email protected]+'''
FROM ['[email protected]+'_JOURNAL] x
INNER JOIN inserted i
ON i.ID = x.ID'
EXEC sp_executesql @sql
END
ELSE
BEGIN
PRINT 'Trigger '+QUOTENAME(@triggerName)+' already exists'
END
END
다음이 실행 :
왜 각 COMPANY_ID에 대해 별도의 테이블을 만드십니까? –
나는 아무것도 만들지 않습니다. 공급 업체의 상자 응용 프로그램이 생성됩니다. 내가 할 수있는 유일한 방법은 이미 생성 된 테이블의 업데이트 정보입니다. –