2012-04-20 32 views
0

我正在使用sql和sql-server如何更改視圖中新創建列的數據類型? SQL

我在一個案例的視圖中創建了一個新列。問題如下:我相信新創建的列有一個默認的數據類型。

我的問題是如何在創建新列時定義新列的數據類型?我已經嘗試使用轉換和演員。

ALTER VIEW [dbo].[vtbl_dim_vb] 
    AS 
    SELECT  
     vb_key,ver_login, 
     ver_name, 
     ver_klass_descr, 
     CAST(ver_klass AS varchar(40)) + ' ' + ver_klass_descr AS klass_descr_d, 
     store_code, 
     store_name, 
     CASE WHEN LEFT(ver_klass, 1) = 'S' THEN ver_klass ELSE NULL END AS ver_sector, 
     CASE WHEN LEFT(ver_klass, 1) = 'M' THEN ver_klass ELSE NULL END AS ver_metier, 
     CASE WHEN LEFT(ver_klass, 1) <> 'S' AND LEFT(ver_klass, 1) <> 'M' THEN ver_klass ELSE NULL END AS ver_rayon 
    FROM   
     dbo.tbl_dim_vb 

我試圖用強制轉換命令,但沒有奏效:

CAST (expression AS data_type [ (length) ]) 

我想知道我有哪些選擇了第三種情況。

這是怎樣的代碼看起來像我嘗試:

CASE WHEN LEFT(ver_klass, 1) <> 'S' AND LEFT(ver_klass, 1) <> 'M' THEN ver_klass ELSE NULL END AS CAST (ver_rayon AS int(10)) 

我需要新創建的列ver_rayon是一個整數數據類型。

非常感謝您的任何建議; )

+0

你什麼異常? – Arion 2012-04-20 06:51:42

+0

消息156,級別15,狀態1,過程vtbl_dim_vb,行19 關鍵字'AS'附近的語法不正確。 - 那是我得到的錯誤 – xtarsy 2012-04-20 06:52:36

回答

1

也許是這樣的:

CAST(
(
    CASE 
    WHEN LEFT(ver_klass, 1) <> 'S' AND LEFT(ver_klass, 1) <> 'M' 
    THEN ver_klass 
    ELSE NULL 
    END 
) AS INT) 
AS ver_rayon 
+0

它像魅力一樣工作。你救了我一天阿里昂; ) – xtarsy 2012-04-20 07:22:25

+0

沒問題。很高興提供幫助:P – Arion 2012-04-20 07:36:00

+0

我們今天學到了什麼。總是在問題中寫出例外:P – Arion 2012-04-20 07:39:04

相關問題