【问题标题】:SQL Use Variable to alter column lengthSQL 使用变量来改变列的长度
【发布时间】:2012-09-13 06:14:16
【问题描述】:

我正在将我的数据从表 T 导出到 CSV 文件,T 有几个 varchar 列,在处理时,我不知道来自数据仓库的数据长度,所以我将长度设置为 500(假设),在导出到 csv 文件后,我注意到它根据列的长度在数据后放置了额外的空格。

我想要做的是将列长度更改为最大数据。所以有两个问题。

  1. 获取表中列内数据的最大长度。
  2. 使用变量更改列,以下代码不起作用,说明“'@l' 附近的语法不正确。”

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

【问题讨论】:

  • a) 听起来好像某处数据被视为CHAR(x) 而不是VARCHAR(x)CHAR(x) 如您所描述的,在末尾添加了填充空格。 b)我不建议改变列的长度。只需使用适当大的VARCHAR(x)(例如VARCHAR(500)VARCHAR(MAX))并在某个适当的阶段执行RTRIM()

标签: sql-server tsql


【解决方案1】:

你不能,直接。

可以执行一些动态 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

但是,正如我在我的 cmets 中指出的那样,我不建议这样做。我建议 a) 找出添加填充的位置,或 b) 在适当的位置使用 RTRIM 删除填充。

我会不理会列定义。

【讨论】:

    【解决方案2】:

    试试这个

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      相关资源
      最近更新 更多