我正在尝试创建一个存储过程,它将创建一个临时表A,其列将依赖于另一个表的行数B.这背景是我允许用户创建自己的'groups'和有关组的信息将存储在表B中。表A的创建将查看表B中的行数,并为表B中的每个组创建一个列(使用组中的名称)表B作为表A)中的列名。我无法反转轴(轴?),因为行将是我系统中每个用户的一个条目,也可以是变量。
总结:如何创建一个过程来创建一个具有可变列数的临时表?
谢谢。
答案 0 :(得分:3)
DECLARE @sSQL varchar(max),
@ColumnName CHAR(128)
DECLARE TableCursor CURSOR FOR
SELECT ColumnName FROM GroupTable
SET @sSQL = 'CREATE TABLE ##NewTempTable ('
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sSQL = @sSQL + RTRIM(@ColumnName) + ' CHAR(10) ,'
FETCH NEXT FROM TableCursor INTO @ColumnName
END
CLOSE TableCursor
DEALLOCATE TableCursor
SET @sSQL = @sSQL + ')'
EXEC (@sSQL)
SELECT * FROM ##NewTempTable
我希望这会有所帮助。在DECLARE CURSOR中,您需要将“ColumnName”和“TableName”更改为您要查询的实际列/表。
答案 1 :(得分:0)
您不应该这样做 - 而是将组名也作为表A中的列。