我只有对 SQL Server 2008 R2 数据库的只读访问权限,我需要把其中某些表的数据复制到我的数据库中;两个数据库具有相同的排序规则。
源数据库使用了很多 text
类型的列。我能否安全地将目标数据库中的列设置为 varchar(MAX)
类型并且在不产生任何风险的情况下复制数据(我正在使用 INSERT 语句复制数据)?
换句话说,我能否安全地从 text
类型的列复制字符串数据到 varchar(MAX)
类型的列?两个列使用了相同的排序规则。
我只有对 SQL Server 2008 R2 数据库的只读访问权限,我需要把其中某些表的数据复制到我的数据库中;两个数据库具有相同的排序规则。
源数据库使用了很多 text
类型的列。我能否安全地将目标数据库中的列设置为 varchar(MAX)
类型并且在不产生任何风险的情况下复制数据(我正在使用 INSERT 语句复制数据)?
换句话说,我能否安全地从 text
类型的列复制字符串数据到 varchar(MAX)
类型的列?两个列使用了相同的排序规则。
是的,绝对没问题 - 你应该使用 VARCHAR(MAX)
类型。两种类型的底层实现本质上是相同的(在足够大的数据或从文本到 VARCHAR(MAX)
的类型更改后),如果你担心这个问题。
你甚至可以通过以下方式“转换”现有的 TEXT
类型列为 VARCHAR(MAX)
:
ALTER TABLE dbo.YourTableHere
ALTER COLUMN YourTextColumnHere VARCHAR(MAX)
这将把你的TEXT
列转换成一个VARCHAR(MAX)
列,而不会有任何数据丢失。
试试看吧!(当然,先在现有数据库的副本上尝试)
NVARCHAR(max)
不是NVARCHAR(4000)
。使用NVARCHAR(max)
没有长度限制。 - Jirka HanikaDECLARE @text VARCHAR(MAX);SET @text=REPLICATE('0,',200000);SELECT DATALENGTH(@text);
。你能解释一下为什么DATALENGTH返回8000吗? - ArionNVARCHAR(MAX)
就是 NVARCHAR(1000000000)
,并且对于那些适合存储在 NVARCHAR(4000)
中的数据进行了性能优化:这样短的数据会以 NVARCHAR
的方式内联存储,而更大的数据则以类似 NTEXT
的方式存储为 BLOB。 - Jirka HanikaREPLICATE(CAST('0,' as NVARCHAR(MAX)), 200000))
。这里不涉及SSMS。 - Jirka Hanika