2012-04-20 28 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

相关问题