SQL 2000修改某字段类型(从money到nvarchar)
本来写成
alter table 表 alter column price nvarchar(20)
可能是因为前面已经有很多数据了,sql server提示:
不允许从数据类型 money 到数据类型 nvarchar 的隐性转换。请使用 CONVERT 函数来运行此查询。
怎么写?
------解决方案--------------------select col1,col2,convert(varchar,price),col.... into # from table
truncate table table
alter table alter column price nvarchar(20)
insert into table select * from #
drop table #
------解决方案--------------------BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_t1
(
f1 int NULL,
f2 nvarchar(20) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.t1)
EXEC( 'INSERT INTO dbo.Tmp_t1 (f1, f2)
SELECT f1, CONVERT(nvarchar(20), f2) FROM dbo.t1 (HOLDLOCK TABLOCKX) ')
GO
DROP TABLE dbo.t1
GO
EXECUTE sp_rename N 'dbo.Tmp_t1 ', N 't1 ', 'OBJECT '
GO
COMMIT
------解决方案--------------------if not object_id(N 't1 ') is null
drop table t1
go
create table t1(f1 int,f2 money)
go
insert into t1 select 1,21.035
go
if not object_id(N 'Tmp_t1 ') is null
drop table Tmp_t1
go
CREATE TABLE dbo.Tmp_t1
(
f1 int NULL,
f2 nvarchar(20) NULL
) ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.t1)
EXEC( 'INSERT INTO dbo.Tmp_t1 (f1, f2)
SELECT f1, CONVERT(nvarchar(20), f2) FROM dbo.t1 (HOLDLOCK TABLOCKX) ')
GO
DROP TABLE dbo.t1
GO
EXECUTE sp_rename N 'dbo.Tmp_t1 ', N 't1 ', 'OBJECT '
GO