在SQL Server中的text和varchar(MAX)之间进行转换

Jox*_*oxi 21 sql-server

我只读过一些SQL Sever 2008 R2数据库,我需要将数据从一些表复制到我的数据库中的表中; 两个数据库都具有相同的排序规则.

源数据库使用许多text数据类型列.我可以安全地在我的数据库中创建目标列varchar(MAX)并复制数据而没有任何风险(我使用INSERT语句来复制数据)?

换句话说,我可以安全地将字符串数据从text类型列复制到列的列中varchar(MAX)吗?两列使用相同的排序规则.

mar*_*c_s 37

是的,绝对 - VARCHAR(MAX)无论如何都是你应该使用的类型.VARCHAR(MAX)如果您担心这两种类型,那么这两种类型的底层实现基本相同(在足够大的数据上,或者在从文本到类型的更改之后).

您甚至TEXT可以VARCHAR(MAX)通过以下方式"转换"现有的类型列:

ALTER TABLE dbo.YourTableHere
ALTER COLUMN YourTextColumnHere VARCHAR(MAX)
Run Code Online (Sandbox Code Playgroud)

这会将您的TEXT列转换为VARCHAR(MAX)列而不会丢失任何数据.

试试吧!(当然,首先是现有数据库副本)

  • @Arion - `REPLICATE`效果是由'0'字符串的类型(向后兼容行为)引起的.以下将生成大量数据:`REPLICATE(CAST('0,'as NVARCHAR(MAX)),200000))`.这里不涉及SSMS. (3认同)
  • 是的,这是安全的.`NVARCHAR(max)`不是`NVARCHAR(4000)`."NVARCHAR(max)"没有长度限制. (2认同)