本来写成
alter table 表 alter column price nvarchar(20)
可能是因为前面已经有很多数据了,sql server提示:
不允许从数据类型 money 到数据类型 nvarchar 的隐性转换。请使用 CONVERT 函数来运行此查询。
怎么写?

解决方案 »

  1.   

    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 #
      

  2.   

    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
      

  3.   

    if not object_id(N't1') is null
    drop table t1 
    gocreate table t1(f1 int,f2 money)
    goinsert into t1 select 1,21.035
    goif 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