불행히도 SQL Server 2005에서는 그리 쉽지 않습니다. 이 작업을 조금 해봤지만 매우 가깝습니다. 그러나 뷰의 열 이름이 기본 테이블의 이름과 완전히 동일하다는 사실에 의존합니다. SQL-Server-2008의 현재 사용되지 않는 뷰 sys.sql_dependencies가 참조하는 column_id를 제대로 저장하지 않기 때문에 뷰의 실제 열과 일치시킬 방법이 없기 때문입니다. SQL Server 2008은 새로운 종속성 개체 집합을 다시 도입 할 때 더 나은 옵션을 제공 할 것입니다. 나는 또한 INFORMATION_SCHEMA.KEY_COLUMN_USAGE로 경로를 추적하지는 않았지만 이러한 뷰는 이름에 전적으로 의존하고 있기 때문에 동일한 피클에있을 가능성이있는 모든 종류의 ID가 아닙니다. 어쩌면 이것은 당신을위한 시작일 수 있지만, 나는 이것이 단순한 경우만을 다룰 것이라고 말했던 것처럼 말입니다. 별칭을 사용하면 행운을 빕니다. 시간이 허락 어쩌면 이러한 일들이 밖으로 토끼를 끌어와 일치하지 않는 열을 참조하는 방법을 알아낼 것이다 참조하는 방법의 복잡한에 몇 가지 통찰력을 가진 다른 사람 ...
-- very simple; one-column key:
CREATE TABLE dbo.boo
(
far INT PRIMARY KEY
);
GO
CREATE VIEW dbo.view_boo
AS
SELECT far FROM dbo.boo;
GO
-- slightly more complex. Two-column key,
-- not all columns are in key, view columns
-- are in different order:
CREATE TABLE dbo.foo
(
splunge INT,
a INT,
mort INT,
PRIMARY KEY(splunge, mort)
);
GO
CREATE VIEW dbo.view_foo
AS
SELECT
splunge,
mort,
a
FROM
dbo.foo;
GO
SELECT
QUOTENAME(OBJECT_SCHEMA_NAME(v.[object_id])) + '.'
+ QUOTENAME(v.name) + '.' + QUOTENAME(vc.name)
+ ' references '
+ QUOTENAME(OBJECT_SCHEMA_NAME(t.[object_id]))
+ '.' + QUOTENAME(t.name) + '.' + QUOTENAME(tc.name)
FROM
sys.views AS v
INNER JOIN
sys.sql_dependencies AS d
ON v.[object_id] = d.[object_id]
INNER JOIN
sys.tables AS t
ON d.referenced_major_id = t.[object_id]
INNER JOIN
sys.columns AS tc
ON tc.[object_id] = t.[object_id]
INNER JOIN
sys.index_columns AS ic
ON tc.[object_id] = ic.[object_id]
AND tc.column_id = ic.column_id
AND tc.column_id = d.referenced_minor_id
INNER JOIN
sys.columns AS vc
ON vc.[object_id] = v.[object_id]
AND vc.name = tc.name -- the part I don't like
INNER JOIN
sys.indexes AS i
ON ic.[object_id] = i.[object_id]
AND i.is_primary_key = 1
ORDER BY
t.name,
ic.key_ordinal;
GO
DROP VIEW dbo.view_boo, dbo.view_foo;
DROP TABLE dbo.foo, dbo.boo;
이 나는대로, 좀 더이 함께 재생됩니다 이 작업을 수행 할 수있는 방법이 있다는 것을 확신합니다 (옵티마이 저는 모든 작업을 수행 할 수 있어야합니다).하지만 지금은 그 작업만으로 충분합니다. –