declare @s nvarchar(500) declare c cursor for select 'alter table ['+a.name+']'+ ' alter column ['+b.name+'] nvarchar(4000)' from sysobjects a join syscolumns b on a.id=b.id and type_name(b.xtype) in('text','ntext') where a.xtype='U ' open c fetch next from c into @s while @@fetch_status=0 begin exec(@s) fetch next from c into @s end close c deallocate c数据库如果是>=SQL2005,把nvarchar(4000)改为nvarchar(max)
--> 生成测试数据表: [tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb] ([ID] [int],[ParentID] [int],[Name] [ntext],[Money] [int]) INSERT INTO [tb] SELECT '1',NULL,'同业信息','50' UNION ALL SELECT '2',NULL,'决策分析','0' UNION ALL SELECT '3','2','客户分析','10' UNION ALL SELECT '4','2','订单分析','20' UNION ALL SELECT '5','2','销售分析','10' UNION ALL SELECT '6','2','会员分析','20' --SELECT * FROM [tb]ALTER TABLE tb ALTER COLUMN [Name] NVARCHAR(4000) GOSELECT * FROM tb /* ID ParentID Name Money ----------- ----------- ------------------------ 1 NULL 同业信息 50 2 NULL 决策分析 0 3 2 客户分析 10 4 2 订单分析 20 5 2 销售分析 10 6 2 会员分析 20(6 行受影响) */NTEXT可以改啊
--> 生成测试数据表: [tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb] ([ID] [int],[ParentID] [int],[Name] [ntext],[Money] [int]) INSERT INTO [tb] SELECT '1',NULL,'同业信息','50' UNION ALL SELECT '2',NULL,'决策分析','0' UNION ALL SELECT '3','2','客户分析','10' UNION ALL SELECT '4','2','订单分析','20' UNION ALL SELECT '5','2','销售分析','10' UNION ALL SELECT '6','2','会员分析','20' --SELECT * FROM [tb]INSERT tb SELECT 7,3,REPLICATE('会员分析',4000),100 FROM tbALTER TABLE tb ALTER COLUMN [Name] NVARCHAR(4000) GOSELECT * FROM tb /* ID ParentID Name Money ----------- ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- 1 NULL 同业信息 50 2 NULL 决策分析 0 3 2 客户分析 10 4 2 订单分析 20 5 2 销售分析 10 6 2 会员分析 20 7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100 7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100 7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100 7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100 7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100 7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100(12 行受影响) */就是长度大于4000都可以测试通过。
declare @s nvarchar(500)
declare c cursor for
select 'alter table ['+a.name+']'+ ' alter column ['+b.name+'] nvarchar(4000)'
from sysobjects a
join syscolumns b
on a.id=b.id
and type_name(b.xtype) in('text','ntext')
where a.xtype='U '
open c
fetch next from c into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from c into @s
end
close c
deallocate c数据库如果是>=SQL2005,把nvarchar(4000)改为nvarchar(max)
服务器: 消息 4928,级别 16,状态 1,行 1
无法更改列 'F1',因为该列是 'ntext'。
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([ID] [int],[ParentID] [int],[Name] [ntext],[Money] [int])
INSERT INTO [tb]
SELECT '1',NULL,'同业信息','50' UNION ALL
SELECT '2',NULL,'决策分析','0' UNION ALL
SELECT '3','2','客户分析','10' UNION ALL
SELECT '4','2','订单分析','20' UNION ALL
SELECT '5','2','销售分析','10' UNION ALL
SELECT '6','2','会员分析','20'
--SELECT * FROM [tb]ALTER TABLE tb ALTER COLUMN [Name] NVARCHAR(4000)
GOSELECT * FROM tb
/*
ID ParentID Name Money
----------- ----------- ------------------------
1 NULL 同业信息 50
2 NULL 决策分析 0
3 2 客户分析 10
4 2 订单分析 20
5 2 销售分析 10
6 2 会员分析 20(6 行受影响)
*/NTEXT可以改啊
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([ID] [int],[ParentID] [int],[Name] [ntext],[Money] [int])
INSERT INTO [tb]
SELECT '1',NULL,'同业信息','50' UNION ALL
SELECT '2',NULL,'决策分析','0' UNION ALL
SELECT '3','2','客户分析','10' UNION ALL
SELECT '4','2','订单分析','20' UNION ALL
SELECT '5','2','销售分析','10' UNION ALL
SELECT '6','2','会员分析','20'
--SELECT * FROM [tb]INSERT tb SELECT 7,3,REPLICATE('会员分析',4000),100 FROM tbALTER TABLE tb ALTER COLUMN [Name] NVARCHAR(4000)
GOSELECT * FROM tb
/*
ID ParentID Name Money
----------- ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------
1 NULL 同业信息 50
2 NULL 决策分析 0
3 2 客户分析 10
4 2 订单分析 20
5 2 销售分析 10
6 2 会员分析 20
7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100
7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100
7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100
7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100
7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100
7 3 会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析会员分析 100(12 行受影响)
*/就是长度大于4000都可以测试通过。