2013-03-07 31 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

相關問題