从提供的变量列名称创建临时表

时间:2012-10-31 07:50:53

标签: sql sql-server insert temp-tables

我想创建一个临时表,其中列将是我作为参数提供的列,由分隔符分隔。

例如,如果列名是:id,name,address ..相应的表应包含相同的数量和列的标题名称。同样,下次列号和名称可能会有所不同。

在这方面有任何帮助吗?

2 个答案:

答案 0 :(得分:3)

试试这个: -

CREATE PROCEDURE GenerateTempTable 
@tableName as nvarchar(max),
@Col1 as nvarchar(255),
@Col2 as nvarchar(255)
AS
BEGIN
Declare @sql nvarchar(max)

set @sql='CREATE TABLE #'+ @tableName  + '
         ('+ @col1+ ' nvarchar(255),'+
          @col2 + ' nvarchar(255)
         )'

-- Select @sql   Check the DDL 

EXECUTE sp_executesql @sql,
N'@tableName nvarchar(max),@Col1 nvarchar(255),@Col2 nvarchar(255)',
@tableName = @tableName,@Col1=@Col1,@Col2=@Col2 


END

上述查询的问题是临时表是使用动态块查询创建的,因此在块之后无法访问它。要访问范围之外的表,您需要创建global temp table ##

编辑: - 全局临时表和静态表名称

的示例
ALTER PROCEDURE GenerateTable 
@Col1 as nvarchar(255),
@Col2 as nvarchar(255)
AS
BEGIN
Declare @sql nvarchar(max)

If object_id('tempdb..##TempTable') is not null 
Drop table ##TempTable

set @sql='CREATE TABLE ##TempTable 
        ('+ @col1+ ' nvarchar(255),'+
        @col2 + ' nvarchar(255)
        )'

-- Select @sql   Check the DDL 

 EXECUTE sp_executesql @sql,
 N'@Col1 nvarchar(255),@Col2 nvarchar(255)',
 @Col1=@Col1,@Col2=@Col2 

 END

要执行SP,sql是: -

 Declare @tableName varchar(max),
 @Col1 varchar(70),
 @Col2 varchar(70)

 Exec GenerateTable @col1='ColA',@Col2='ColB'

编辑2: -

如果您确定参数的数量不会超过x值(说5)。然后您可以创建5个默认参数。查看this链接以获取更多详细信息。

答案 1 :(得分:0)

您是否可以从这些“动态字段名称”所在的位置创建一个不在列表之外的表格?然后将其作为字符串列表推入...就像...我用颜色创建了一个表格然后得到了一个名称字段,现在将其推入可用于构建表头的字符串...对数量没有限制...

SELECT @Fields = coalesce(@Fields + ',', '') +  convert(varchar(50),[name])
                FROM #TempCols
                WHERE column_id > 1
                ORDER BY column_id

其中Column_ID只是一个窗口的ROW_Number ...

我不同意它永远不可能的观点。总有一种方法,我们现在可能看不到,但是总有一种方法可以嵌套或滥用,以使任何规则都符合我们的需要。