2

テーブルTからCSVファイルにデータをエクスポートしています。Tにはいくつかのvarchar列があります。処理時に、データウェアハウスからのデータの長さがわからないため、長さを500に設定します(想定)。 csvファイルにエクスポートした後、列の長さに基づいてデータの後に余分なスペースが配置されていることに気付きました。

私がやりたいのは、列の長さを最大データに変更することです。したがって、2つの質問があります。

  1. テーブルの列内のデータの最大長を取得します。
  2. 変数を使用して列を変更します。次のコードは、「「@l」の近くの構文が正しくありません」と表示されて機能しません。

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

2 に答える 2

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適切な場所で a を使用してパディングを削除することをお勧めします。

列の定義はそのままにしておきます。

于 2012-09-13T06:33:03.727 に答える
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)
于 2012-09-13T06:33:17.957 に答える