SQL Server 구조 리팩토링

SQL Server 구조 리팩토링

종종 C# 코드에서 변수 이름을 변경할 수 있으며 이에 대한 모든 참조도 변경됩니다.

SQL 서버의 개체에 대해 이 작업을 수행할 수 있는 유사한 기능이 있습니까? 일부 테이블, 열 및 저장 프로시저의 이름을 바꿔야 하지만 당연히 모든 기능이 계속 작동하고 싶습니다.

답변1

Q: 이를 수행할 수 있는 앱과 기능이 있나요?

예.

Q: 꼭 사용해야 하나요?

아마도 그렇지 않을 것입니다. SQL의 문제점은 객체 이름에 대한 모든 참조를 포착하는 것이 매우 어렵다는 것입니다.

한 가지 예는 문자열을 작성한 다음 해당 문자열을 쿼리로 실행하는 기술인 동적 SQL입니다. 내 저장 프로시저에 다음과 같은 코드가 있을 수 있습니다.

DECLARE @StringToExecute
SET @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'
EXEC (@StringToExecute);

dbo.MyTableName의 이름을 다른 이름으로 바꾸려면 저장 프로시저와 앱 코드 내부의 문자열을 확인해야 합니다. 이것은 또한 유효하기 때문에 하기가 정말 어렵습니다.

DECLARE @StringToExecute
SET @StringToExecute = 'USE Database1;'
SET @StringToExecute = @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'
EXEC (@StringToExecute);
SET @StringToExecute = 'USE Database2;'
SET @StringToExecute = @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'

이는 두 개의 서로 다른 데이터베이스에 있는 두 개의 서로 다른 MyTableName에 대한 두 개의 서로 다른 쿼리를 작성합니다.

또 다른 예는 연결된 서버 쿼리입니다. 다른 SQL Server에는 연결된 서버, 동의어, 보기 등을 설정하여 기존 개체를 쿼리할 수 있습니다.

따라서 객체 이름 변경 및 테이블 리팩토링은 실제로 다음과 같은 경우에만 수행할 수 있습니다.

  • 귀하의 앱은 상당히 젊습니다.
  • 쿼리를 매우 엄격하게 제어할 수 있습니다.
  • 쿼리가 들어오는 모든 곳을 알고 있습니다.

답변2

Linq to SQL에 대해 이야기하고 Visual Studio에서 LINQ 개체 정의를 변경하는 경우 이를 업데이트하는 일반적인 방법은 디자이너에서 해당 정의를 삭제하고 다시 추가한 다음 해당 참조를 찾아 새 이름으로 업데이트하는 것입니다. DI 및 저장소 패턴과 같은 것을 사용하는 경우 참조가 모두 한 영역에 있고 코드 전체에 분산되지 않으므로 이는 매우 쉽습니다.

답변3

무언가를 사고 싶다면 다음과 같습니다.레드 게이트골목길에 뭔가가 있어요.

답변4

나는 당신이 시도하는 것이 좋습니다SQL 완료 테이블, 열, 임시 테이블 및 열, 뷰, 저장 프로시저 및 함수에 의미 있고 자체 설명이 가능한 이름을 제공하여 코드 가독성을 향상시킬 수 있습니다. SQL Complete는 이름이 바뀐 개체에 대한 모든 참조를 자동으로 수정합니다.

기능적으로 이름 바꾸기를 사용하면 몇 초 안에 로컬 및 SQLCMD 변수의 이름을 변경할 수도 있습니다. 이름 바꾸기 대화 상자 창의 편리한 트리 보기에서 코드 변경 사항을 미리 볼 수 있습니다.

관련 정보