我想在表定义为变量的表中添加大约50列。这些列的名称来自另一个表,基本上它们只是数字--DEPA_KEY。 (部门密钥)
是否可以使用循环或类似的东西动态添加这些列?
表定义为变量(这里我想动态添加50列):
DECLARE @USERS TABLE
(
USER_KEY INT,
USDE_HSU DECIMAL(8,2)
)
查询所有部门:
SELECT DEPA_KEY FROM CADEPA
答案 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)
;