日期:2014-05-19  浏览次数:20653 次

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