在表中插入不同的值

时间:2017-07-10 10:40:25

标签: sql sql-server tsql pivot

我正在基于包含多个数据库的服务器上的数据库结果集创建表。        我的表将创建一个包含Database_Name

的列列表

FOR EG:

 DECLARE @strt INT,@End INT,@Database NVARCHAR(20), @ColumnDeclaration  VARCHAR(2000),@SqlSelect NVARCHAR(MAX),@column_Name NVARCHAR(255)

    SELECT * INTO #T FROM SYS.DATABASES 
     ORDER BY NAME

        SELECT @ColumnDeclaration=STUFF(( SELECT ', ' + Name + ' NVARCHAR(255)'
                                                    FROM #T
                                                    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(max)'), 1, 1, '')


        SET @SqlSelect=' CREATE TABLE Temp_Comp (' + @ColumnDeclaration + ');'
                PRINT @SqlSelect
                EXEC (@SqlSelect)

SELECT * FROM Temp_Comp

1 个答案:

答案 0 :(得分:0)

  

我不想将数据INTO Temp_Comp表中的特定值插入   名称将在Temp_comp表中的数据库

不确定你想要实现什么,但我认为你想要的东西是:

DECLARE @strt INT,@End INT,@Database NVARCHAR(20), @ColumnDeclaration  NVARCHAR(MAX),@SqlSelect NVARCHAR(MAX),@column_Name NVARCHAR(255)

SELECT * INTO #T 
FROM SYS.DATABASES 
ORDER BY NAME;

 SELECT @ColumnDeclaration=STUFF(( SELECT ', ' + QUOTENAME(Name) + ' NVARCHAR(255)'
                                                    FROM #T
                                                    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(max)'), 1, 1, '');


SET @SqlSelect=' CREATE TABLE Temp_Comp (col_desc NVARCHAR(200), ' + @ColumnDeclaration + ');';
SELECT @SqlSelect;
EXEC (@SqlSelect);


SET @SQLSelect =  ' INSERT INTO Temp_Comp(col_desc, ' + REPLACE(@ColumnDeclaration, 'NVARCHAR(255)', '')  + ')' + 
                  ' SELECT col,'+ REPLACE(@ColumnDeclaration, 'NVARCHAR(255)', '')  +' FROM (' + 
  ' SELECT name, sub.* FROM sys.databases' + 
  ' OUTER APPLY (SELECT ''database_id'', CAST(database_id AS NVARCHAR(MAX)) UNION ALL SELECT ''compatibility_level'', CAST(compatibility_level AS NVARCHAR(MAX))  ) sub(col, val)) src' + 
  ' PIVOT (MAX(val) FOR name IN ('+ REPLACE(@ColumnDeclaration, 'NVARCHAR(255)', '')  +') ) piv';

SELECT @SQLSelect;
EXEC (@SQLSelect);

<强> DBFiddle

结果:

enter image description here

为了INSERT你可以使用动态PIVOT。要添加更多值,只需扩展OUTER APPLY部分。

请注意,您已将列定义为' NVARCHAR(255)',因此您可能需要在插入前转换值。