创建具有可变列数的表的过程

时间:2013-08-29 18:25:53

标签: sql-server sql-server-2012

我正在尝试创建一个存储过程,它将创建一个临时表A,其列将依赖于另一个表的行数B.这背景是我允许用户创建自己的'groups'和有关组的信息将存储在表B中。表A的创建将查看表B中的行数,并为表B中的每个组创建一个列(使用组中的名称)表B作为表A)中的列名。我无法反转轴(轴?),因为行将是我系统中每个用户的一个条目,也可以是变量。

总结:如何创建一个过程来创建一个具有可变列数的临时表?

谢谢。

2 个答案:

答案 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中的列。