답변:
장점은 같은 기능을 사용할 수 있습니다 LEN
과 LEFT
에 nvarchar(max)
당신이 그 상대로 할 수 없습니다 ntext
와 text
. 사용했던 곳 nvarchar(max)
보다 작업하기가 더 쉽습니다.text
WRITETEXT
과 UPDATETEXT
.
또한 text
, ntext
등이 중단되고 ( http://msdn.microsoft.com/en-us/library/ms187993.aspx )
nvarchar(max)
당신이 사용하고 싶은 것입니다. 가장 큰 장점은이 데이터 유형에서 모든 T-SQL 문자열 함수를 사용할 수 있다는 것입니다. 에서는 사용할 수 없습니다 ntext
. 나는 실제 단점을 알지 못한다.
nvarchar(max)
4000 자로 제한한다는 것입니다. 필드가 그 이상을 유지하려면 어떻게해야합니까?
nvarchar(max)
4000자를 제한 합니다. 따라서 SQL Server Compact의 ntext
경우 어떤 경우에는 사용할 수밖에 없습니다 . 그들이 중단하면 일부 사이트를 업그레이드하지 않아도됩니다.
의 가장 큰 단점 Text
(함께 NText
하고 Image
)이하는 것과 같이 SQL Server의 이후 버전에서 제거 될 것입니다 문서 . 그러면 해당 버전의 SQL Server가 릴리스 될 때 스키마를 효과적으로 업그레이드하기가 더 어려워집니다.
전환에 대한 경험을 추가하고 싶었습니다. text
고대 Linq2SQL 코드 에는 많은 필드 가있었습니다 . 이것은 text
인덱스에있는 열을 온라인 으로 재 구축 할 수 있도록 하기위한 것 입니다.
먼저 몇 년 동안의 이점에 대해 알고 있었지만 항상 변환은 SQL Server가 테이블을 다시 작성하고 모든 것을 복사하여 웹 사이트를 중단시키고 내 심박수를 올리는 무서운 긴 쿼리를 의미한다고 가정했습니다.
Linq2SQL이 열 유형에 대해 일종의 확인을 수행하는 경우 오류가 발생할 수 있다고 우려했습니다.
그러나 ALTER 명령이 즉시 반환되었으므로 테이블 메타 데이터 만 변경하고 있다는 사실 만보고하면 좋을 것입니다. <8000 자 데이터를 다시 테이블로 가져 오는 오프라인 작업이있을 수 있지만 ALTER 명령은 즉시 수행되었습니다.
변환이 필요한 모든 열을 찾으려면 다음을 실행했습니다.
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name
이것은 나에게 좋은 쿼리 목록을 주며 방금 선택하여 새 창에 복사했습니다. 내가 말했듯이-이것은 즉시 실행되었습니다.
Linq2SQL은 매우 고대입니다. 테이블을 끌어 오는 디자이너를 사용합니다. EF 코드의 경우 상황이 더 복잡 할 수 있지만 아직 다루지 않았습니다.