2013-03-07 87 views
0

我在通过C#导入一些数据时让我的生活更轻松,如果我可以在SQL端执行所有转换和投射(并设置正确的列长度),而不是在C#中(因为我的C#代码都是动态的,没有硬编码,当东西不是正确的长度时它会下降)。这或多或少是我做的一个非常小的规模是什么:可以为视图定义列类型和大小吗?

CREATE VIEW vw_pendingitems 
AS 
    SELECT 
     CAST(a.columnone AS CHAR(1)) 'Column 1', 
     CAST(a.columntwo AS CHAR(1)) 'Column 2', 
     CAST(a.adecimalcolumn AS VARCHAR(30)), 
     CAST(null AS VARCHAR(20)) 'A not yet defined column', 
     b.anintcolumn 'An int column' 
FROM table1 a 
JOIN table2 b ON a.key = b.key 

前两列都工作正常,但我觉得我打的问题时,我投了空。有没有其他的/更好的方法来做我想要完成的事情?

+0

你错过了一个结束)的第三列? – 2013-03-07 06:35:33

+0

是的,谢谢你抓到:) – Logan 2013-03-07 06:36:38

+0

@LoganDam:如果在'a.adecimalcolumn'中遇到null,你希望发生什么?你现在得到什么错误? – 2013-03-07 06:51:10

回答

0

A CAST应该可以正常使用空列。它将仅返回NULL。如果你不想要NULL那么你可以使用ISNULL

SELECT ISNULL(CAST(NULL AS VARCHAR(20)), '') 'A not yet defined column' 

虽然你应该小心改变数据类型。如果您使用较小的数据类型,则可能会丢失数据或发生错误。

+0

现在工作正常。我得到了一个错误,我虽然与空值有关,但事实证明我只是想把一个像'NAD'这样的字符串变成一个显然死亡的int。我也不担心数据丢失,它必须发生在我的情况。 – Logan 2013-03-07 06:59:45

相关问题