2012-09-13 42 views
2

我正在將我的數據從表T導出到CSV文件,T有幾個varchar列,在處理時,我不知道來自數據倉庫的數據的長度如此我將長度設置爲500(假設),在導出到csv文件後,我注意到它在基於列長度的數據之後放置了額外的空格。SQL使用變量來改變列的長度

我想要做的是將列長度改爲最大數據。所以有兩個問題。

  1. 獲取表格中列中數據的最大長度。
  2. 使用變量來改變列,下面的代碼不起作用,說明「@l'附近的語法不正確。

    DECLARE @l int 
    SET @l = 12 
    
    ALTER TABLE Temp 
    ALTER COLUMN a VarChar(@l) 
    
+1

一)這聽起來像某處的數據被視爲'CHAR(x)的',而不是'VARCHAR(x)的'。正如你所描述的那樣,CHAR(x)'將填充空格添加到最後。 b)我不建議改變色譜柱長度。只需使用適當大的'VARCHAR(x)'(例如'VARCHAR(500)'或'VARCHAR(MAX)')並在適當的階段執行'RTRIM()'。 –

回答

3

你不能直接。

可以執行位動態SQL:

create table Temp (a varchar(20) not null) 

DECLARE @l int 
SET @l = 12 

declare @Sql nvarchar(max) 
set @Sql = ' 
ALTER TABLE Temp 
ALTER COLUMN a VarChar(' + CONVERT(varchar(10),@l) + ') not null' 
exec sp_executesql @Sql 

但是,正如我在我的評論所指出的,我不會推薦。我建議a)找出填充位置,或b)在適當的位置使用RTRIM刪除填充。

我會離開列定義。

1

試試這個

DECLARE @l int 
SET @l = 12 
DECLARE @strsql varchar(500) 
SET @strsql='ALTER TABLE tbl4 ALTER COLUMN col1 VarChar('+cast(@l as varchar(5))+')' 
exec(@strsql)