CAST函数/填充执行成功但未显示在表结果

时间:2015-10-09 12:01:27

标签: sql-server

我使用了以下CAST函数,从int更改为varchar

SELECT Genre,
       GenreUpdated = LEFT(REPLICATE('x',12) + CAST(Genre AS VARCHAR (23)),23)
FROM Artists

查询执行成功,结果如下;

    Genre       GenreUpdated
1   Pop         xxxxxxxxxxxxPop
2   Pop         xxxxxxxxxxxxPop
3   Grunge      xxxxxxxxxxxxGrunge
4   Alternative xxxxxxxxxxxxAlternative
5   Soul        xxxxxxxxxxxxSoul

但是当我想使用代码SELECT * FROM Artists检索表时,我得到以下内容;

    Artist                  Genre       Country     GenreUpdated
1   The Beatles             Pop         UK          Pop
2   The Beach Boys          Pop         USA         Pop
3   Nirvana                 Grunge      USA         Grunge
4   The Velvet Underground  Alternative USA         Alternative
5   Marvin Gaye             Soul        USA         Soul

我希望表格列“GenreUpdated”看起来与上面相同,就像包含所有x个字符一样,包括填充。

我确实尝试使用INSERT函数,以包含填充,如下所示;

INSERT INTO Artists (GenreUpdated)
SELECT REPLICATE ('x',23 - DATALENGTH(GenreUpdated)) + GenreUpdated AS 'Varchar Column'
FROM Artists

然而,这给了我错误消息,“无法将值NULL插入列'Artist',表'BestAlbums2.dbo.Artists';列不允许空值.INSERT失败”。尽管我的列属性为varchar(23)null,但仍会出现此错误。

任何人都可以帮助并告诉我出错的地方吗?

谢谢大家。

2 个答案:

答案 0 :(得分:1)

如果您想永久更改GenreUpdated列中的数据,则需要使用update语句。

INSERT添加了不是您想要做的新数据;您想使用UPDATE更改现有数据。

UPDATE Artists
SET GenreUpdated = LEFT(REPLICATE('x',12) + CAST(Genre AS VARCHAR(23)),23)

由于GenreUpdated中的数据取决于Genre,您应该考虑根本不存储它,而是使用computed column来返回所需格式的数据,但不会&# 39;如果Genre列发生变化,则需要更新。您可以使用以下语句添加它:

ALTER TABLE artists 
ADD GenreUpdatedComputed AS LEFT(REPLICATE('x',12) + CAST(Genre AS VARCHAR(23)),23)

答案 1 :(得分:0)

您可能正在寻找UPDATE

UPDATE Artists
SET
GenreUpdated = LEFT(REPLICATE('x',12) + CAST(Genre AS VARCHAR (23)),23)