我将数据从表T导出到CSV文件,T有几个varchar列,在处理时,我不知道来自数据仓库的数据长度所以我将长度设置为500(假设),在导出到csv文件后,我注意到它根据列的长度在数据之后放置了额外的空格。
我想要做的是将列长度更改为最大数据。所以有两个问题。
使用变量更改列,以下代码不起作用,说明“@l'附近的语法不正确。”
DECLARE @l int
SET @l = 12
ALTER TABLE Temp
ALTER COLUMN a VarChar(@l)
答案 0 :(得分: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 :(得分: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)