Troubleshooting Metadata Visibility of Distributed Partitioned Views
Jeśli najniższych uprawnień próba do wstawiania, aktualizacji lub usuwania danych przy użyciu rozproszonej widokiem podzielonym na partycje SQL Server generuje następujący komunikat o błędzie:
Błąd 4436 "wyświetlić UNION ALL" %. * ls nie jest aktualizowalny, ponieważ nie można odnaleźć kolumna partycjonowania. „
Ten problem nie wpływa na widoki lokalnie podzielonym na partycje, na przykład jeśli istnieją wszystkich tabel, w tym samym wystąpieniu SQL Server.
Tło
W przypadku kwerend rozproszonych SQL Server musi być w stanie odczytać definicji SQL ograniczeń CHECK dla tabel (połączone) serwera zdalnego. Oznacza to, że wywołujący kwerenda rozproszona, trzeba mieć uprawnienia kontroli, ALTER, własność UWZGLĘDNAIJĄ lub definicja VIEW w tabela zdalnej.Jeśli wywołujący kwerenda rozproszona nie ma jednego z uprawnień, kończy się niepowodzeniem z powodu błędu 4436.
Uwaga
Jeśli użytkownik nie ma jednego z tych uprawnień, wartość definicja kolumnasys.check_constraints jest równa zerowa, gdy użytkownik wykonuje kwerendę w katalogu.
Aby rozwiązać błąd 4436
Aby wyświetlić definicję ograniczenia CHECK do obiektu wywołującego, udzielić wywołującego definicja VIEW w każdej tabela miejsce docelowe źródłową rozproszony widok partycjonowany.
Na przykład załóżmy, że Server1 i Server2 stowarzyszoną serwerów i zostały zdefiniowane jako serwery połączone ze sobą. Załóżmy, że master.dbo.t1 jest to tabela partycjonowana, które mogą być udostępniane przez wszystkich członków dpv_users Rola bazy danych. Załóżmy, że dpv_users zawiera wszystkich użytkowników, którzy mają SELECT, INSERT, UPDATE i DELETE dostęp za pomocą rozproszonego widoku podzielonym na partycje.
Wykonać następujący kod dla każdego serwer połączony.
CREATE TABLE t1(c INT PRIMARY KEY CHECK (...)) ; -- CHECK is different on each server.
GO
GRANT SELECT, INSERT, UPDATE, DELETE, VIEW DEFINITION ON t1 TO dpv_users ;
GO
CREATE VIEW the_dpv AS
SELECT * FROM Server1.master.dbo.t1
UNION ALL
SELECT * FROM Server2.master.dbo.t1
GO