주어진 테이블과 관련된 모든 객체를 프로그래밍 방식으로 스크립팅하는 방법이 있습니까?


9

SQL Management Studio에서 테이블 / 트리거 / 키를 마우스 오른쪽 버튼으로 클릭 할 수 있다는 것을 알고 있습니다 script object as.... 객체 이름이 주어지면 프로그래밍 방식 으로이 작업을 수행 할 수 있습니까?

그렇다면 주어진 테이블과 관련된 모든 객체 (기본 키, 외래 키, 트리거)를 찾고 프로그래밍 방식으로 스크립트를 작성하는 방법이 있습니까?

답변:


5

이를 시작하는 방법은 다음과 같습니다.

DECLARE @TableName VARCHAR(50)
DECLARE @ObjectID INT
SET @TableName = '' -- the name of the objects you want to investigate

SELECT @ObjectID = [id]  FROM sysobjects WHERE name=@TableName

SELECT * FROM sysobjects WHERE name=@TableName
UNION
SELECT * FROM sysobjects WHERE id in (SELECT id FROM sysdepends WHERE depid= @ObjectID)

의 sysdepends는 "테이블"은 객체가 다른에 의존하는 당신에게 말할 것이다. 계층 적이므로 null을 얻을 때까지 SysDepends를 반복적으로 실행해야 할 수도 있습니다. 때로는 sysdepends가 불완전합니다. 여기에 다른 제안 사항있는 기사가 있습니다 .

을 sysobjects "테이블"은 데이터베이스에있는 개체에 대한 몇 가지 물건을 알려드립니다. 유형 (또한 xtype) 열은 사용자 정의 테이블, 저장 프로 시저, 트리거 등 항목이 무엇인지 알려줍니다.

그런 다음 sp_helptext 가 저장 프로 시저의 텍스트를 뱉어 내기를 원할 것 입니다. 암호화 된 저장 프로 시저의 텍스트는 재현되지 않습니다.

완전하고 완전한 솔루션에는 암호화 된 저장 프로 시저 및 트리거가 포함 된 경우 특히 프로그래밍이 필요합니다. 프로그래밍 방식으로 DB의 항목을 결정하는 샘플 기사 SQL Server 2000 저장 프로 시저를 해독하는 데 필요한 데이터 유형이 SQL Server 2005에 나타 났으므로 SQL Server 2000에서 SQL을 사용하여 자체 암호화 저장 프로 시저를 해독 할 수 없었지만 (SQL Server 2005의 SQL에서는 해독 할 수 있음) 2005 년에서 2008 년으로 전환 할 때도 마찬가지 였다는 사실에 놀라지 마십시오. 몇 년 전에 저장 프로 시저를 해독하는 데 관심이 없었습니다.


5

이것은 C #에서 서버 관리 개체를 사용하는 기술입니다. 순수한 T-SQL에서 수행하는 방법을 모르겠습니다.


이것에 정신적으로 추가하면, powershell2.0
jcolebrand

3

프로그래밍 방식으로 개체를 스크립팅하는 데 필요한 모든 정보를 찾는 방법을 알고 있습니다. 그러나 실제로 스크립트를 작성하려면 스크립트 생성 코드를 직접 작성해야 할 수도 있습니다.

기존 개체에 대한 모든 정보를 찾기 위해 코드를 작성하는 경우 Google의 용어는 "SQL Server Data Dictionary"입니다.

몇 가지 시작 예제를 드리겠습니다.

특정 테이블에서 모든 외래 키 제약 조건을 찾으려면

select * from information_schema.table_constraints where CONSTRAINT_TYPE = 'FOREIGN KEY'
and TABLE_NAME = 'aspnet_Roles'

특정 테이블을 참조하는 외래 키 제약 조건을 모두 찾으려면

select 
sys.foreign_keys.name as key_name,
pt.name as parent_table_name,
pc.name as parent_column_name,
ct.name as referenced_table_name,
cc.name as referenced_colum_name 
from sys.foreign_key_columns
inner join sys.foreign_keys on sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.object_id
inner join sys.tables pt on sys.foreign_key_columns.parent_object_id = pt.object_id
inner join sys.tables ct on sys.foreign_key_columns.referenced_object_id = ct.object_id
inner join sys.columns pc on sys.foreign_key_columns.parent_object_id = pc.object_id and sys.foreign_key_columns.parent_column_id = pc.column_id
inner join sys.columns cc on sys.foreign_key_columns.referenced_object_id = cc.object_id and sys.foreign_key_columns.referenced_column_id = cc.Column_id
where ct.name = 'aspnet_Applications'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.