문제

사용 MS SQL2008 하고 싶은 트리거를 만들고 데이터베이스에서 생성되는 동적입니다.

데이터베이스를 만들이라고 저장 프로시저 내의 다른 데이터베이스와 완벽하게 실행하지만,내가 원하는 경우 추가하거나 저장 프로시저를 실행이 실패합니다.

면 나는 실행하려고 하 dynamiy SQL 로

EXEC('USE dbase
GO
CREATE TRIGGER [blah]
GO')

을 얻을:

잘못된 구문 근처'GO'

고 제거하면 나도'사용'트리거에 만들어집니다 잘못된 데이터베이스입니다.

이 있을 피하기 위해 트릭 내 문제가 있습니까?

다.

도움이 되었습니까?

해결책

"GO"지 않 T-SQL 언어입니다.그것은 키워드 해석에 의해 클라이언트와 같은 도구 SSMS 일괄적으로 분리(즉,"텍스트를 보내 서버").

지금을 만들고,트리거해야에서 첫번째 문 배치 그래서"사용 dbname"할 수 있는 사용되지 않습니다.

당신이 언급하는 경우"사용 dbnname 앞에서"EXEC 다음에 대한 기본 데이터베이스 연결이 있습니다.에 따라 달라질 수 있 테스트(나는 지금 할 수 있지 않,죄송합니다)

--Might work
USE dbase
EXEC ('CREATE TRIGGER [blah]
')

또는 당신을 사용해야 sqlcmd 또는활을 연결하고 실행 코드:이를 설정할 수 있습 db 컨텍스트에 연결합니다.내 T-SQL 하지만입니다.

거나 시도할 수 있습니다 ALTER 로그인 xxx 와 DEFAULT_DATABASE=dbname 전 EXEC

ALTER LOGIN xxx WITH DEFAULT_DATABASE = dbname 
--Now the EXEC will connect to default db if above approach fails
EXEC('CREATE TRIGGER [blah]
')

다른 팁

EXEC를 호출하기 전에 데이터베이스를 전환하고 바로 다음을 다시 전환 할 수 있습니다.

use newdb
exec ('CREATE TRIGGER [blah] ...')
use originaldb

또는 rpc가 enAlbed를 사용하여 오른쪽 데이터베이스에 연결된 서버를 작성하고 :

EXEC ('CREATE TRIGGER [blah] ...') AT LinkedServerName

또는 트리거를 작성하려는 데이터베이스에 기본 카탈로그가있는 다른 사용자를 만듭니다.

EXECUTE AS LOGIN = 'UserName'
EXEC ('CREATE TRIGGER [blah] ...')
REVERT

참조 만 유효성 만 유효성을 작성한 다음 Alter로 수정합니다.

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MiTrigger]') AND type in (N'TR'))
    EXEC ('CREATE TRIGGER [MiTrigger] ON [dbo].[MiTabla] FOR DELETE AS SET NOCOUNT ON')
GO
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top