2012-05-15 8 views
18

一部のSQL Server 2008 R2データベースへの読み取り専用アクセスがあり、一部のテーブルからデータベースのテーブルにデータをコピーする必要があります。両方のデータベースの照合順序が同じです。SQL Serverのテキストとvarchar(MAX)の間の変換

ソースデータベースは、textデータ型の多くの列を使用します。私のデータベースの対象カラムをタイプvarchar(MAX)にして、データをコピーするのに問題なく(データをコピーするためにINSERT文を使用しています)安全にコピーできますか?

つまり、textタイプのカラムからvarchar(MAX)のカラムに文字列データを安全にコピーできますか?どちらの列も同じ照合を使用します。

+0

注:年のための私達に警告した後 - MSは、実際には、クラウド内の 'SQLデータWarehouse'ためのTEXTタイプを削除しました。これは 'Azure SQL Database'でもまだ利用可能ですが、スーパーハイエンドのデータウェアハウスはそれを削除しました:https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse -tables-data-types –

答えて

33

はい、間違いなく - VARCHAR(MAX)は、とにかく使用する必要があるタイプです。両方の型の基本的な実装は、それを心配するならば、実質的に同じです(データが十分に大きいか、またはテキストからVARCHAR(MAX)への型変更後)。

あなたもによってVARCHAR(MAX)にタイプTEXTの既存の列を「変換」することができます。これは、任意のデータを失うことなくVARCHAR(MAX)欄にあなたのTEXT列に変わります

ALTER TABLE dbo.YourTableHere 
ALTER COLUMN YourTextColumnHere VARCHAR(MAX) 

(もちろんの最初の既存のデータベースのコピー、)

+0

これは本当に安全です。 'text'カラムが' varchar(max) 'カラムより大きい場合はどうなりますか?それではテキストをカットしないのですか? – Arion

+2

はい、安全です。 'NVARCHAR(max)'は 'NVARCHAR(4000)'ではありません。 'NVARCHAR(max)'には長さ制限はありません。 –

+1

だから簡単なテスト。このように、 'DECLARE @Text VARCHAR(MAX); SET @ text = REPLICATE( '0、'、200000); SELECT DATALENGTH(@テキスト);'。なぜDATALENGTHが8000を返すのか説明できますか? – Arion

関連する問題