2015-10-09 58 views
0

我已經使用以下CAST功能沒有顯示出來,以從int改變爲varcharCAST功能/填充成功地執行,但在表結果

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值插入列‘藝術家’,表‘BestAlbums2.dbo.Artists’;列不允許空INSERT失敗。」儘管我的列屬性是varchar(23)null,但會出現此錯誤。

任何人都可以幫助和建議我哪裏錯了嗎?

謝謝大家。

回答

1

如果你想永久改變在列GenreUpdated的數據,你需要使用一個update聲明。

INSERT增加了不是你想要做的新數據;你想使用UPDATE這改變了現有的數據。

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

GenreUpdated數據取決於Genre你應該考慮的不是將其存儲在所有的,而是用一個computed column這將所需格式返回數據,但不需要如果Genre列的變化更新。您可以使用以下語句添加它:

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

謝謝,當我看到您的回答和您的解釋時,我顯然是在犯一個基本錯誤。太盯着它,重試我的代碼,以實現我的基本錯誤。希望我不會再犯這個錯誤。 – Josie

0

您可以尋找UPDATE

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