转换

2012-05-15 47 views
18

我只读过一些SQL Sever的2008 R2数据库访问,我需要将数据从它的一些表在我的数据库中的表的复印件;两个数据库都具有相同的排序规则。转换

源数据库使用了大量text数据类型的列。我可以安全地使我的数据库中的目标列varchar(MAX)和复制数据没有任何风险(我正在使用INSERT语句来复制数据)?

换句话说,我可以放心地从text类型的列复制字符串数据的varchar(MAX)列?两列使用相同的排序规则。

+0

注意:多年后警告我们 - MS实际上删除了云中的Sql数据仓库的TEXT类型。它仍然可用于'Azure SQL数据库',但超高端数据仓库已将其删除:https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse -tables-data-types –

回答

33

是的,没错 - VARCHAR(MAX)是你应该使用反正类型。这两种类型的底层实现基本相同(对于足够大的数据,或者从文本到VARCHAR(MAX)的类型更改之后),如果担心的话。

你甚至可以TEXT类型的现有列“转换”到VARCHAR(MAX)通过:

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

这将打开你的TEXT列到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(@text);'。你能解释为什么DATALENGTH返回8000? – Arion