想补充我的转换经验。我在古老的 Linq2SQL 代码中有很多 text 字段。这是为了允许索引中存在的text 列是rebuilt ONLINE。
多年来,我首先知道这些好处,但一直认为转换意味着一些可怕的长查询,SQL Server 必须重建表并复制所有内容,从而使我的网站崩溃并提高我的心率。
我还担心如果 Linq2SQL 在对列类型进行某种验证时可能会导致错误。
很高兴地报告,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 Code 首先的情况可能更复杂,但我还没有解决这个问题。