动态添加 50 列到表变量

Fre*_*kyB 1 t-sql sql-server

我想向定义为变量的表中添加大约 50 列。这些列的名称来自另一个表,基本上它们只是数字 - DEPA_KEY。(部门重点)

是否可以使用循环或类似的东西动态添加这些列?

定义为变量的表(这里我想动态添加 50 列):

DECLARE @USERS TABLE
(
  USER_KEY INT,
  USDE_HSU DECIMAL(8,2)
)
Run Code Online (Sandbox Code Playgroud)

查询所有部门:

SELECT DEPA_KEY FROM CADEPA
Run Code Online (Sandbox Code Playgroud)

Zoh*_*led 8

AFAIK,您不能更改表变量的结构:

DECLARE @T AS TABLE
(
    col1 int
);

ALTER TABLE @T 
    ADD col2 char(1)       
;
Run Code Online (Sandbox Code Playgroud)

这将产生错误。

但是,您可以使用临时表来执行此操作:

CREATE TABLE #T 
(
    col1 int
);

ALTER TABLE #T 
    ADD col2 char(1)
;    
Run Code Online (Sandbox Code Playgroud)


Ser*_*rge 6

无法更改表变量的结构。因此,您将无法将列添加到@USERS.

您可以更改临时表的结构。如果将变量更改为临时表,您将能够动态添加列:

CREATE TABLE #USERS
(
  USER_KEY INT,
  USDE_HSU DECIMAL(8,2)
)

DECLARE  @col_name VARCHAR(100)
        ,@Sql VARCHAR(MAX)
DECLARE col_name CURSOR
    FOR
    SELECT DEPA_KEY
    FROM CADEPA

OPEN col_name
FETCH NEXT FROM col_name
    INTO @col_name

WHILE @@FETCH_STATUS = 0
BEGIN

    SET @Sql = 'ALTER TABLE #USERS ADD ' + QUOTENAME(@col_name) + ' INT NULL'

    -- PRINT @Sql
    EXEC (@Sql)

    FETCH NEXT FROM col_name
        INTO @col_name

END

CLOSE col_name
DEALLOCATE col_name
Run Code Online (Sandbox Code Playgroud)