我正在尝试创建一个存储过程,它将创建一个临时表 A,其列将取决于另一个表 B 的行数。这样做的背景是我允许用户创建自己的“组” ,关于组的信息将存储在表 B 中。表 A 的创建将查看表 B 中的行数,并为表 B 中的每个组创建一个列(使用表 B 中的组名称作为表 A) 中的列名。我无法反转轴(轴?),因为行将是我系统中每个用户的条目,这也是可变的。
总而言之:我将如何创建一个过程来创建具有可变列数的临时表?
谢谢你。
我正在尝试创建一个存储过程,它将创建一个临时表 A,其列将取决于另一个表 B 的行数。这样做的背景是我允许用户创建自己的“组” ,关于组的信息将存储在表 B 中。表 A 的创建将查看表 B 中的行数,并为表 B 中的每个组创建一个列(使用表 B 中的组名称作为表 A) 中的列名。我无法反转轴(轴?),因为行将是我系统中每个用户的条目,这也是可变的。
总而言之:我将如何创建一个过程来创建具有可变列数的临时表?
谢谢你。
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”更改为您正在查询的实际列/表。
您不应该这样做 - 相反,将组名也设为表 A 中的列。