【问题标题】:Create Table with n Columns automatically自动创建具有 n 列的表
【发布时间】:2013-09-30 20:21:11
【问题描述】:

我想在一行中将 236 个 int 值存储到 sql 中。现在我必须声明表,但我不想输入列名的 236 倍。列名应该是 BYTE001、BYTE002、... 或其他前缀为 BYTE(B、INT、...)。 是否可以自动生成ColumnNames?

我尝试了以下代码,但它不起作用:

USE dbXXX
DECLARE @Columname varchar(10)
SET @Columname = 'BYTE011'
ALTER table tbl_Archiv_BYTEsps
ADD @Columname int;

我想在 while 循环中生成列名,但似乎不允许将变量与 ADD-Command 一起使用。我总是收到错误:'@Columname' 附近的语法错误 我该怎么做才能生成表格?或者还有其他方法可以存储我的 236 个整数值吗?

【问题讨论】:

  • 这个表代表什么实体?是否所有行都恰好有 236 个非空值?顺序重要吗?即BYTE001 是否可以与BYTE236 互换?此外,如果值是字节,BINARY(236) 是你需要的吗?

标签: sql-server tsql ddl


【解决方案1】:

你需要使用动态sql来执行这个查询。

DECLARE @query VARCHAR(MAX)

SET @query='ALTER table tbl_Archiv_BYTEsps ADD '+@Columname+' int'
EXEC (@query)

但我认为最好检查您的表结构,因为为一个表维护 236 列似乎有点混乱。

【讨论】:

    【解决方案2】:

    试试这个 -

    IF OBJECT_ID ('dbo.temp') IS NOT NULL
       DROP TABLE dbo.temp
    
    DECLARE @SQL NVARCHAR(MAX)
    SELECT @SQL = 'CREATE TABLE dbo.temp (ID INT IDENTITY(1,1) PRIMARY KEY, ' + STUFF((
        SELECT ', BYTE' + RIGHT('000' + CAST(sv.number AS VARCHAR(3)), 3) + ' INT'
        FROM [master].dbo.spt_values sv
        WHERE sv.[type] = 'p'
            AND sv.number BETWEEN 1 AND 236
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')'
    
    PRINT @SQL
    EXEC sys.sp_executesql @SQL
    

    输出 -

    CREATE TABLE dbo.temp (ID INT IDENTITY(1,1) PRIMARY KEY, BYTE001 INT, BYTE002 INT, BYTE003 INT, BYTE004 INT, BYTE005 INT, BYTE006 INT, BYTE007 INT, BYTE008 INT, BYTE009 INT, BYTE010 INT, BYTE011 INT, BYTE012 INT, BYTE013 INT, ... , BYTE235 INT, BYTE236 INT)
    

    【讨论】:

      【解决方案3】:

      现在我写了这段代码:

      USE sip_audi_01
      DECLARE @Columname varchar(10)
      DECLARE @integer int
      DECLARE @query VARCHAR(MAX)
      SET @integer = 0
      SET @Columname = 'BYTE'
      SET @query='ALTER table tbl_Archiv_BYTEsps ADD '+@Columname+' int'
      WHILE @integer = 235
      BEGIN
        SET @integer = @integer + 1
        SET @Columname = @Columname + CAST(@integer AS char)
        EXEC (@query)
        PRINT 'Nummer:' + CAST(@integer AS char)
      END;
      

      但什么都没有发生......我可以在哪里读取 SQL-Server ManagementStudio 中的打印输出? @Devart,抱歉,您的代码对我来说太难了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多