3

SQL Server Management Studioを使用して、テーブルが同じデータベースまたは異なるデータベースのビューの一部であるかどうかを確認することはできますか?

いくつかのプラグインを介してそれを行うことができれば、それも問題ありません。

4

3 に答える 3

5

このような:

SELECT  *
FROM    INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE   TABLE_SCHEMA = 'dbo'    --(or whatever your Schema name is)
  AND   TABLE_NAME   = 'YourTableName'

SQL Serverだけでなく、ISOSQL準拠のデータベースで動作する必要があります。

データベース間の依存関係は別の問題であることに注意してください。理論的にはここに表示されますが、実際には、SQL Serverでは、データベース間の参照に関しては、ビューに対しても遅延解決が許可されているため、これは一貫性がない可能性があります。

于 2013-01-30T22:53:20.843 に答える
2
SELECT QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
  + '.' + QUOTENAME(OBJECT_NAME([object_id]))
  FROM sys.sql_dependencies
  WHERE referenced_major_id = OBJECT_ID(N'dbo.your_table_name');

または:

SELECT referencing_schema_name, referencing_entity_name
  FROM sys.dm_sql_referencing_entities(N'dbo.your_table_name', N'OBJECT');

ただし、、などを含むこれらのメソッドの一部はすべて同期が外れる傾向があることに注意しsp_dependsてくださいINFORMATION_SCHEMAsysdepends詳細はこちら:

簡単な例:

CREATE TABLE dbo.table1(id INT);
GO
CREATE VIEW dbo.view1 
AS
  SELECT id FROM dbo.table1;
GO

SELECT QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
  + '.' + QUOTENAME(OBJECT_NAME([object_id]))
  FROM sys.sql_dependencies
  WHERE referenced_major_id = OBJECT_ID('dbo.table1');

-- returns 1 row

GO    
DROP TABLE dbo.table1;
GO
CREATE TABLE dbo.table1(id INT);
GO

SELECT QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
  + '.' + QUOTENAME(OBJECT_NAME([object_id]))
  FROM sys.sql_dependencies
  WHERE referenced_major_id = OBJECT_ID('dbo.table1');

-- returns 0 rows!!!!

以下を実行すると、再び行が返されます。

EXEC sp_refreshsqlmodule N'dbo.view1';

しかし、メタデータをチェックするたびに、システム内のすべてのビューを更新したいのは誰ですか?

したがって、この方法を、すべてのビューのテキストのブルートフォース解析と組み合わせることができます。

SELECT name FROM sys.views
  WHERE OBJECT_DEFINITION([object_id])
  LIKE N'%your_table_name%';

これは、テーブルの名前によっては誤検知が発生する可能性がありますが、おそらく適切なクロスチェックです。

この種の問題を回避するために、私は自分のビューを作成する習慣を身につけようとしましたWITH SCHEMABINDING(または、ビューをできるだけ避けるようにしました)。確かに、ビューに影響を与えない方法でテーブルを変更する必要がある場合、それは苦痛になる可能性がありますが、とにかくテーブルの変更は真剣に受け止められる必要があります。

于 2013-01-30T22:59:36.543 に答える
1

同じデータベースについて、そのテーブルの依存関係をチェックし、他のオブジェクトがそれを使用していることを確認できます。

EXEC sp_depends @objname = N'your_table_name' ;
于 2013-01-30T22:53:08.233 に答える