Как следует из ошибки, триггеры должны быть созданы в той же базе данных, что и базовая таблица назначения.
Поэтому убедитесь, что вы создали триггер в той же БД (_TestDB), что и ваша таблица dbo.test
USE _TestDB
GO
SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER dbo.TestTrigger
ON dbo.test
AFTER UPDATE AS
BEGIN
SET NOCOUNT ON;
END
GO
Редактировать : Просто уточнить - соединение на уровне экземпляра сервера, а не на уровне базы данных.Определив вашу таблицу как _TestDB.dbo.test
, вы сможете получить доступ к таблице, даже если ваша текущая база данных (каталог) в данный момент указывает на другую базу данных.
Редактировать : OIC - да,это означает, что ваша текущая БД не является "_TestDB".Вы также обнаружили несоответствие в выполнении DDL SQL.Большинство команд DDL могут быть успешно выполнены из удаленной базы данных (включая CREATE INDEX), но по какой-то причине не триггер.Следующее подчеркивает несоответствие (SQL 2008 Express)
use master
go
CREATE DATABASE bob
GO
-- DB_NAME() = master
CREATE TABLE bob.dbo.SomeTable
(
SomeTableId INT NOT NULL,
AnotherField VARCHAR(50) NULL
)
GO -- Success
-- DB_NAME() = master
CREATE INDEX IX1_SomeTable on bob.dbo.SomeTable(SomeTableId)
GO -- Success. Note that the index is actually created in bob, not master of course
-- DB_NAME() = master
ALTER TABLE bob.dbo.SomeTable ADD CONSTRAINT PK_SomeTableId PRIMARY KEY(SomeTableId)
GO -- Success
-- DB_NAME() = master
CREATE TRIGGER bob.dbo.SomeTableTrigger -- 'CREATE/ALTER TRIGGER' does not allow specifying the database name as a prefix to the object name.
ON bob.dbo.SomeTable
AFTER UPDATE
AS
BEGIN
PRINT 'Trigger called'
END
GO
-- DB_NAME() = master - this is your scenario -
CREATE TRIGGER dbo.SomeTableTrigger -- Cannot create trigger on 'bob.dbo.SomeTable' as the target is not in the current database.
ON bob.dbo.SomeTable
AFTER UPDATE
AS
BEGIN
PRINT 'Trigger called'
END
GO
USE BOB
GO
-- DB_NAME() = bob
CREATE TRIGGER dbo.SomeTableTrigger -- Success
ON bob.dbo.SomeTable
AFTER UPDATE
AS
BEGIN
PRINT 'Trigger called'
END
GO