我使用了以下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,但仍会出现此错误。
任何人都可以帮助并告诉我出错的地方吗?
谢谢大家。
答案 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)