视图和消息错误消息245,级别16,状态1,行1转换失败

时间:2015-10-07 14:57:12

标签: sql-server

我创建了以下视图;

CREATE VIEW Artist_by_Rank
AS
    SELECT Artist, Genre FROM Artists
    UNION
    SELECT Artist, Change FROM Albums

结果是命令创建成功。

当我尝试使用SELECT * FROM Artist_by_Rank查看此视图​​时,收到以下消息

  

Msg 245,Level 16,State 1,Line 1
  将varchar值'Pop'转换为数据类型int时,转换失败。

Pop是一个文本,它是Genre列的一部分。

在此消息之后,我检查了视图中

列的数据类型
Artist (varchar(60), not null)
Genre (int, not null)

因此,要更正错误,我正在尝试将列Genreint更改为varchar,但我收到如下错误消息;

ALTER VIEW Artist_by_Rank
CAST(Genre as varchar(15))
  

Msg 102,Level 15,State 1,Procedure Artist_by_Rank,Line 2
  “CAST”附近的语法不正确

1 个答案:

答案 0 :(得分:0)

ALTER VIEW不会以递增方式工作,您必须按照自己的方式重新创建整个视图,例如:

CREATE VIEW Artist_by_Rank
AS
    SELECT Artist, CAST(Genre as varchar(15)) as Genre_char FROM Artists
    UNION ALL
    SELECT Artist, Change FROM Albums
抱歉,尝试将强制转换结果别名化为另一个名称,并查看数据类型分配是否成功。如果是,您可以使用所需的别名再次运行它(将genre_char更改为流派)