动态地向表变量添加50列

时间:2017-02-15 09:26:04

标签: sql-server tsql

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

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

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

DECLARE @USERS TABLE
(
  USER_KEY INT,
  USDE_HSU DECIMAL(8,2)
)

查询所有部门:

SELECT DEPA_KEY FROM CADEPA

2 个答案:

答案 0 :(得分:3)

无法更改表变量的结构。 因此,您将无法向@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

答案 1 :(得分:2)

AFAIK,您无法更改表变量的结构:

DECLARE @T AS TABLE
(
    col1 int
);

ALTER TABLE @T 
    ADD col2 char(1)       
;

这会产生错误。

可以,但是,使用临时表:

CREATE TABLE #T 
(
    col1 int
);

ALTER TABLE #T 
    ADD col2 char(1)
;