모든 저장 프로시저에서 테이블의 스키마 이름을 변경하는 방법

StackOverflow https://stackoverflow.com/questions/101463

  •  01-07-2019
  •  | 
  •  

문제

SQL Server 2005에서 테이블의 스키마를 변경하는 방법을 알고 있습니다.

ALTER SCHEMA NewSchama TRANSFER dbo.Table1

하지만 이전 스키마 이름을 사용하는 저장 프로시저를 어떻게 확인 및/또는 변경할 수 있습니까?

죄송합니다:내 말은:저장프로시저의 SQL에 해당 테이블의 이전 스키마 이름을 가지고 있는 저장프로시저가 있는데...프로시저 본문에 dbo.Table1이 있는 모든 저장 프로시저를 어떻게 편집할 수 있습니까?

도움이 되었습니까?

해결책

스키마를 변경하기 전에 테이블을 마우스 오른쪽 버튼으로 클릭하여 종속 개체 목록을 가져온 다음 테이블에 종속된 항목을 살펴보고 목록을 만든 다음 이를 변경합니다.그러나 SQL Server 추적 종속성을 깨뜨릴 수 있으므로 뭔가를 놓칠 가능성이 항상 있습니다.

그러나 가장 좋은 방법은 데이터베이스를 파일로 스크립팅한 다음 테이블 이름을 검색하고 변경해야 하는 모든 sproc 목록을 만든 다음 이를 스크립트에 추가하여 스키마를 변경하는 것입니다. 탁자.

다른 팁

  • SSMS에서 작업>스크립트 생성을 사용하여 일련의 Create Proc 스크립트를 제공합니다.
  • 찾기 및 바꾸기 사용(Alt - 시간) '만들기'를 '변경'으로 변경하려면
  • 사용 에프 & 아르 자형 'dbo.Table1'을 'dbo.Table2'로 변경하려면
  • 그런 다음 실행(F5)를 클릭하여 영향을 받는 모든 SP를 수정합니다.

간단하지만 효과적인.

@SearchObject VARCHAR(100) 선언

SET @SearchObject = 'searchable_table_name' -- 'searchable_table_name'을 검색하려는 테이블 이름으로 변경합니다.

SELECT sc.name [검색 개체], so.name [컨테이너 개체],
'u'시기 'u'the 'table'때 'p'는 'p'가 'f'를 'f'로 정의 할 때 '표지'를 'else'다른 '끝'[컨테이너 객체 유형

sysobjects에서 그래서

INNER JOIN syscolumns sc ON so.id = sc.id

WHERE sc.name LIKE '%' + @SearchObject + '%' AND so.xtype IN ('U','P','F') -- U:테이블, P:저장 프로시저, F:사용자 정의 함수(udf)

ORDER BY [컨테이너 개체] ASC

-- 요청된 테이블 이름이 포함된 저장 프로시저를 표시합니다.

syscomments에서 텍스트 선택 '%from' + @SearchObject + '%'와 같은 텍스트

(유형='P'이고 이름 = ''인 sysobjects에서 ID 선택)

-- 특정 저장 프로시저의 내용을 표시합니다(위에서 확인).

--Exec sp_helptext 'DeleteAssetByID'

예를 들어 Reports 테이블을 생성하면 기본적으로 dbo 스키마가 여기에 할당됩니다. 이제 Reports 테이블의 스키마를 변경하려면 먼저 Reporting이라는 새 스키마를 생성합니다.

CREATE SCHEMA Reporting

그런 다음 아래 스크립트를 실행하여 Reports 테이블의 스키마를 dbo에서 Reporting으로 변경합니다.

ALTER SCHEMA Reporting TRANSFER dbo.Reports 

또는 더 나은 이해를 위해:

ALTER SCHEMA 'newSchema' TRANSFER 'oldSchema'.'table'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top