2008-10-22 4 views
2

테이블에 varchar (6000) 필드가 여러 개 있고이를 텍스트 필드로 변경하려고한다고 가정합니다. 인수가 varchar (6000) 유형 인 저장 프로 시저의 파생물은 무엇입니까? 각 저장 프로 시저에도 인수 데이터 유형이 변경되어야합니까?SQL Server 저장 프로 시저 인수 형식 변환

답변

4

SQL Server 2005 이상에서는 텍스트 필드가 deprecated입니다. 가능한 경우 varchar (MAX)를 사용해야합니다. 저장 프로 시저의 인수에 6000 개가 넘는 문자가 전달 될 것으로 예상되는 경우이를 변경해야합니다.

2

SQL Server에서 텍스트 필드가 작동하지 않습니다. 실제로 텍스트 유형의 로컬 변수 (저장 프로 시저에 대한 매개 변수 제외)를 선언 할 수 없으며 대부분의 문자열 조작 함수는 텍스트 필드에서 더 이상 작동하지 않습니다.

또한 트리거가있는 경우 텍스트 필드가 INSERTED 또는 DELETED 테이블에 나타나지 않습니다.

기본적으로 필드가 프로그램에서 데이터를 보유하고 있고 사용자가 조작하지 않으면 큰 문제가되지 않습니다. 그러나 문자열을 조작하는 절차를 저장 한 경우 작업이 훨씬 어려워집니다.

SQL Server 2005에서 VARCHAR (MAX)를 사용하면 tvanfosson이 언급 한 것처럼 VARCHAR처럼 조작 할 수있는 텍스트 필드의 길이를 얻을 수 있습니다.

0

텍스트 필드 사용의 이유는 한 행의 모든 ​​varchar (6000) 필드가 최대 행 길이를 초과하기 때문입니다. 텍스트 필드는 행에 포인터를 저장하므로 SQL Server 최대 행 길이 인 8000을 초과하지 않습니다. ATM 데이터베이스를 정규화 할 수 없습니다. 데이터는 방금 삽입, 업데이트 및 삭제 된 저장 프로 시저에 의해 조작되지 않습니다.

VARCHAR (MAX)는 텍스트 필드처럼 동작하며 행의 데이터 포인터 만 저장합니까?

1

다른 답변은 맞지만 질문에 답변하지 않습니다. Varchar (최대)는 갈 길입니다. feilds varchar (max)/text를 작성했지만 저장된 proc 인수를 동일하게 유지하면 저장된 proc을 통해 제공된 모든 필드가 6000 자로 잘립니다. 당신이 그것을 결코 초과하지 않는다고 말하기 때문에, 물론 그렇지 않을 때까지, 당신은 괜찮을 것입니다. 오류가 발생하지 않습니다. 그냥 자릅니다.

varchar (max) 구절 텍스트의 정확한 동작에 대해서는 잘 모르겠지만 일단 많은 테이블을 하나의 테이블에 넣기 시작하면 성능이 저하 될 수 있습니다. 왜 한 테이블에 이렇게 많은 큰 들판이 있습니까?