У Вас может быть Внешний ключ на Представление таблицы Linked Server в SQLServer 2k5?

                   ( ~A * B) + C * (~B + A)
~C * ( ~A * B) + C*( ~A * B) + C * (~B + A)    X = X*Y + X*~Y
~C * ( ~A * B) + C*( ~A * B) + C * ~(B * ~A)   De Morgan
~C * ( ~A * B) + C                             X*Y + X*~Y = X 
     ( ~A * B) + C                             Absorption

Не уверен, что если у X = X*Y + X*~Y есть имя, его можно получить из:

x 
X * 1            Idempotence
X * (Y + ~Y)     Complement
X * Y + X * ~Y   Distributive Law

Редактировать: Я нашел более простой способ:

[112 ]
5
задан FishBasketGordo 20 February 2012 в 21:37
поделиться

3 ответа

Внешние ключи не могут быть подключены к нелокальным объектам - они должны сослаться на локальные таблицы. Вы получаете "максимальное количество префиксов" ошибка, потому что Вы ссылаетесь на таблицу с именем с 4 частями (LinkedServer. База данных. Схема. Объект), и локальный объект только имел бы имя с 3 частями.

Другие решения:

  1. Копируйте данные из источника (местоположение представления) к тому же серверу как таблица, Вы пытаетесь включить ключ. Можно каждый час делать это, ежедневно, или что бы то ни было, в зависимости от того, как часто исходные данные изменяются.
  2. Добавьте триггер на исходной таблице для продвижения любых изменений в локальной копии. Это по существу совпало бы с № 1, но с непосредственным населением изменений
  3. Добавьте INSTEAD OF" триггер к Вашей таблице, которая вручную проверяет ограничение внешнего ключа путем выбора из связанного сервера и сравнения значения, которое Вы пытаетесь ВСТАВИТЬ/ОБНОВИТЬ. Если это не соответствует, можно отклонить изменение.
10
ответ дан 13 December 2019 в 19:37
поделиться

Вы можете, но необходимо использовать некоторый динамический обман SQL, чтобы заставить его произойти.

declare @cmd VARCHAR(4000)
SET @cmd = 'Use YourDatabase
ALTER TABLE YourTable
DROP CONSTRAINT YourConstraint'

exec YourServer.master.dbo.sp_executesql @SQL
1
ответ дан 13 December 2019 в 19:37
поделиться

Нет, внешние ключи должны быть сделаны против пользовательских таблиц. Вы попробовали ниже?

alter table [baz] with check 
add constraint [fk1_baz_to_foo] 
FOREIGN KEY([foo_id]) 
references 
   LINKEDSERVER.RemoteDatabase.dbo.tbl_bar([id])
go
0
ответ дан 13 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: