2017-09-12 29 views
0

当使用MS SQL Management Studio中的“生成脚本”功能时,我们也可以导出数据,但所有值都是以单独的步骤插入的,使用插入值在单个命令中生成MS SQL服务器“生成脚本”

INSERT [dbo].[table] ([table_id], [table_version], [table_timestamp], [table_user], [table_percent], [table_hid], [table_latestversionid], [table_isdeleted]) VALUES (3, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 30 %', NULL, 13, 0) 
INSERT [dbo].[table] ([table_id], [table_version], [table_timestamp], [table_user], [table_percent], [table_hid], [table_latestversionid], [table_isdeleted]) VALUES (4, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 40 %', NULL, 14, 0) 
INSERT [dbo].[table] ([table_id], [table_version], [table_timestamp], [table_user], [table_percent], [table_hid], [table_latestversionid], [table_isdeleted]) VALUES (5, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 50 %', NULL, 15, 0) 
INSERT [dbo].[table] ([table_id], [table_version], [table_timestamp], [table_user], [table_percent], [table_hid], [table_latestversionid], [table_isdeleted]) VALUES (6, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 60 %', NULL, 16, 0) 
INSERT [dbo].[table] ([table_id], [table_version], [table_timestamp], [table_user], [table_percent], [table_hid], [table_latestversionid], [table_isdeleted]) VALUES (7, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 70 %', NULL, 17, 0) 
INSERT [dbo].[table] ([table_id], [table_version], [table_timestamp], [table_user], [table_percent], [table_hid], [table_latestversionid], [table_isdeleted]) VALUES (8, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 80 %', NULL, 18, 0) 

有什么办法让这个脚本生成,并迫使SSMS在一个或几个较大的步骤来创建插入查询,如:

INSERT [dbo].[table] ([table_id], [table_version], [table_timestamp], [table_user], [table_percent], [table_hid], [table_latestversionid], [table_isdeleted]) 
VALUES 
(3, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 30 %', NULL, 13, 0), 
(4, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 40 %', NULL, 14, 0), 
(5, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 50 %', NULL, 15, 0), 
(6, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 60 %', NULL, 16, 0), 
(7, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 70 %', NULL, 17, 0), 
(8, -1, CAST(N'2015-06-04 13:03:38.000' AS DateTime), N'init', N' 80 %', NULL, 18, 0); 

感谢

+4

'VALUES'有1000行的限制(可能会在新版本中更改),所以这样的功能在开始时的用途有限。我会打赌它还没有建成。您可以通过搜索替代样板来自己实现效果,但为了获得插入数据的任何类型的性能,应该废弃整个脚本方法以支持批量复制数据。 (另外,将现有语句包装在'BEGIN TRANSACTION ... COMMIT'中有好处,因为它是单独的提交,而不是语句的大小,因此效率低下。) –

+1

第二个脚本在1000行中有限制,也许这是为什么他们不这样做 –

+0

那么,MySQL有这个,因为我不记得什么时候,但MSSQL更喜欢垃圾脚本文件。可怜。 – Romczyk

回答

1
--First Create The SP GenerateInsert The Run The Below Mention CODE Which will give the Desire Output.. 

     IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.GenerateInsert') AND type in (N'P', N'PC')) 
     DROP PROCEDURE dbo.GenerateInsert; 
    GO 

    CREATE PROCEDURE dbo.GenerateInsert 
    (
     @ObjectName nvarchar(261) 
    , @TargetObjectName nvarchar(261) = NULL 
    , @OmmitInsertColumnList bit = 0 
    , @GenerateSingleInsertPerRow bit = 0 
    , @UseSelectSyntax bit = 0 
    , @UseColumnAliasInSelect bit = 0 
    , @FormatCode bit = 1 
    , @GenerateOneColumnPerLine bit = 0 
    , @GenerateGo bit = 0 
    , @PrintGeneratedCode bit = 1 
    , @TopExpression nvarchar(max) = NULL 
    , @FunctionParameters nvarchar(max) = NULL 
    , @SearchCondition nvarchar(max) = NULL 
    , @OrderByExpression nvarchar(max) = NULL 
    , @OmmitUnsupportedDataTypes bit = 1 
    , @PopulateIdentityColumn bit = 0 
    , @PopulateTimestampColumn bit = 0 
    , @PopulateComputedColumn bit = 0 
    , @GenerateProjectInfo bit = 1 
    , @GenerateSetNoCount bit = 1 
    , @GenerateStatementTerminator bit = 1 
    , @ShowWarnings bit = 1 
    , @Debug bit = 0 
    ) 
    AS 

    BEGIN 
    SET NOCOUNT ON; 

    DECLARE @CrLf char(2) 
    SET @CrLf = CHAR(13) + CHAR(10); 
    DECLARE @ColumnName sysname; 
    DECLARE @DataType sysname; 
    DECLARE @ColumnList nvarchar(max); 
    SET @ColumnList = N''; 
    DECLARE @SelectList nvarchar(max); 
    SET @SelectList = N''; 
    DECLARE @SelectStatement nvarchar(max); 
    SET @SelectStatement = N''; 
    DECLARE @OmittedColumnList nvarchar(max); 
    SET @OmittedColumnList = N''; 
    DECLARE @InsertSql nvarchar(max); 
    SET @InsertSql = N'INSERT INTO ' + COALESCE(@TargetObjectName,@ObjectName); 
    DECLARE @ValuesSql nvarchar(max); 
    SET @ValuesSql = N'VALUES ('; 
    DECLARE @SelectSql nvarchar(max); 
    SET @SelectSql = N'SELECT '; 
    DECLARE @TableData table (TableRow nvarchar(max)); 
    DECLARE @Results table (TableRow nvarchar(max)); 
    DECLARE @TableRow nvarchar(max); 
    DECLARE @RowNo int; 

    IF PARSENAME(@ObjectName,3) IS NOT NULL 
     OR PARSENAME(@ObjectName,4) IS NOT NULL 
    BEGIN 
     RAISERROR(N'Server and database names are not allowed to specify in @ObjectName parameter. Required format is [schema_name.]object_name',16,1); 
     RETURN -1; 
    END 

    IF OBJECT_ID(@ObjectName,N'U') IS NULL -- USER_TABLE 
     AND OBJECT_ID(@ObjectName,N'V') IS NULL -- VIEW 
     AND OBJECT_ID(@ObjectName,N'IF') IS NULL -- SQL_INLINE_TABLE_VALUED_FUNCTION 
     AND OBJECT_ID(@ObjectName,N'TF') IS NULL -- SQL_TABLE_VALUED_FUNCTION 
    BEGIN 
     RAISERROR(N'User table, view, table-valued or inline function %s not found or insuficient permission to query the provided object.',16,1,@ObjectName); 
     RETURN -1; 
    END 

    IF NOT EXISTS (
     SELECT 1 
     FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_TYPE IN ('BASE TABLE','VIEW') 
     AND TABLE_NAME = PARSENAME(@ObjectName,1) 
     AND (TABLE_SCHEMA = PARSENAME(@ObjectName,2) 
      OR PARSENAME(@ObjectName,2) IS NULL) 
    ) AND NOT EXISTS (
     SELECT * 
     FROM INFORMATION_SCHEMA.ROUTINES 
     WHERE ROUTINE_TYPE IN ('FUNCTION') 
     AND DATA_TYPE = 'TABLE' 
     AND SPECIFIC_NAME = PARSENAME(@ObjectName,1) 
     AND (SPECIFIC_SCHEMA = PARSENAME(@ObjectName,2) 
      OR PARSENAME(@ObjectName,2) IS NULL) 
    ) 
    BEGIN 
     RAISERROR(N'User table, view, table-valued or inline function %s not found or insuficient permission to query the provided object.',16,1,@ObjectName); 
     RETURN -1; 
    END 

    DECLARE ColumnCursor CURSOR LOCAL FAST_FORWARD FOR 
    SELECT c.name ColumnName 
    ,COALESCE(TYPE_NAME(c.system_type_id),t.name) DataType 
    FROM sys.objects o 
     INNER JOIN sys.columns c ON c.object_id = o.object_id 
     LEFT JOIN sys.types t ON t.system_type_id = c.system_type_id 
     AND t.user_type_id = c.user_type_id 
    WHERE o.type IN (N'U',N'V',N'IF',N'TF') 
     -- U = USER_TABLE 
     -- V = VIEW 
     -- IF = SQL_INLINE_TABLE_VALUED_FUNCTION 
     -- TF = SQL_TABLE_VALUED_FUNCTION 
     AND (o.object_id = OBJECT_ID(@ObjectName) 
     OR o.name = @ObjectName) 
     AND (COLUMNPROPERTY(c.object_id,c.name,'IsIdentity') != 1 
     OR @PopulateIdentityColumn = 1) 
     AND (COLUMNPROPERTY(c.object_id,c.name,'IsComputed') != 1 
     OR @PopulateComputedColumn = 1) 
    ORDER BY COLUMNPROPERTY(c.object_id,c.name,'ordinal') -- ORDINAL_POSITION 
    FOR READ ONLY 
    ; 
    OPEN ColumnCursor; 
    FETCH NEXT FROM ColumnCursor INTO @ColumnName,@DataType; 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     -- Handle different data types 
     DECLARE @ColumnExpression nvarchar(max); 
     SET @ColumnExpression = 
     CASE 
     WHEN @DataType IN ('char','varchar','text','uniqueidentifier') 
     THEN N'ISNULL(''''''''+REPLACE(CONVERT(varchar(max),'+ QUOTENAME(@ColumnName) + N'),'''''''','''''''''''')+'''''''',''NULL'') COLLATE database_default' 

     WHEN @DataType IN ('nchar','nvarchar','sysname','ntext','sql_variant','xml') 
     THEN N'ISNULL(''N''''''+REPLACE(CONVERT(nvarchar(max),'+ QUOTENAME(@ColumnName) + N'),'''''''','''''''''''')+'''''''',''NULL'') COLLATE database_default' 

     WHEN @DataType IN ('int','bigint','smallint','tinyint','decimal','numeric','bit') 
     THEN N'ISNULL(CONVERT(varchar(max),'+ QUOTENAME(@ColumnName) + N'),''NULL'') COLLATE database_default' 

     WHEN @DataType IN ('float','real','money','smallmoney') 
     THEN N'ISNULL(CONVERT(varchar(max),'+ QUOTENAME(@ColumnName) + N',2),''NULL'') COLLATE database_default' 

     WHEN @DataType IN ('datetime','smalldatetime','date','time','datetime2','datetimeoffset') 
     THEN N'''CONVERT('[email protected]+',''+ISNULL(''''''''+CONVERT(varchar(max),'+ QUOTENAME(@ColumnName) + N',121)+'''''''',''NULL'') COLLATE database_default' + '+'',121)''' 

     WHEN @DataType IN ('rowversion','timestamp') 
     THEN 
      CASE WHEN @PopulateTimestampColumn = 1 
      THEN N'''CONVERT(varbinary(max),''+ISNULL(''''''''+CONVERT(varchar(max),CONVERT(varbinary(max),'+ QUOTENAME(@ColumnName) + N'),1)+'''''''',''NULL'') COLLATE database_default' + '+'',1)''' 
      ELSE N'''NULL''' END 

     WHEN @DataType IN ('binary','varbinary','image') 
     THEN N'''CONVERT(varbinary(max),''+ISNULL(''''''''+CONVERT(varchar(max),CONVERT(varbinary(max),'+ QUOTENAME(@ColumnName) + N'),1)+'''''''',''NULL'') COLLATE database_default' + '+'',1)''' 

     WHEN @DataType IN ('geography') 
     -- convert geography to text: ?? column.STAsText(); 
     -- convert text to geography: ?? geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326); 
     THEN NULL 

     ELSE NULL END; 

     IF @ColumnExpression IS NULL 
     AND @OmmitUnsupportedDataTypes != 1 
     BEGIN 
     RAISERROR(N'Datatype %s is not supported. Use @OmmitUnsupportedDataTypes to exclude unsupported columns.',16,1,@DataType); 
     RETURN -1; 
     END 

     IF @ColumnExpression IS NULL 
     BEGIN 
     SET @OmittedColumnList = @OmittedColumnList 
      + CASE WHEN @OmittedColumnList != N'' THEN N'; ' ELSE N'' END 
      + N'column ' + QUOTENAME(@ColumnName) 
      + N', datatype ' + @DataType; 
     END 

     IF @ColumnExpression IS NOT NULL 
     BEGIN 
     SET @ColumnList = @ColumnList 
      + CASE WHEN @ColumnList != N'' THEN N',' ELSE N'' END 
      + QUOTENAME(@ColumnName) 
      + CASE WHEN @GenerateOneColumnPerLine = 1 THEN @CrLf ELSE N'' END; 

     SET @SelectList = @SelectList 
      + CASE WHEN @SelectList != N'' THEN N'+'',''+' + @CrLf ELSE N'' END 
      + @ColumnExpression 
      + CASE WHEN @UseColumnAliasInSelect = 1 AND @UseSelectSyntax = 1 THEN N'+'' ' + QUOTENAME(@ColumnName) + N'''' ELSE N'' END 
      + CASE WHEN @GenerateOneColumnPerLine = 1 THEN N'+CHAR(13)+CHAR(10)' ELSE N'' END; 
     END 

     FETCH NEXT FROM ColumnCursor INTO @ColumnName,@DataType; 
    END 

    CLOSE ColumnCursor; 
    DEALLOCATE ColumnCursor; 

    IF NULLIF(@ColumnList,N'') IS NULL 
    BEGIN 
     RAISERROR(N'No columns to select.',16,1); 
     RETURN -1; 
    END 

    IF @Debug = 1 
    BEGIN 
     PRINT(N'--Column list'); 
     PRINT(@ColumnList); 
    END 

    IF NULLIF(@OmittedColumnList,'') IS NOT NULL 
     AND @ShowWarnings = 1 
    BEGIN 
     PRINT(N'--*************************'); 
     PRINT(N'--WARNING: The following columns have been omitted because of unsupported datatypes: ' + @OmittedColumnList); 
     PRINT(N'--*************************'); 
    END 

    IF @GenerateSingleInsertPerRow = 1 
    BEGIN 
     SET @SelectList = 
     N'''' + @InsertSql + N'''+' + @CrLf 
     + CASE WHEN @FormatCode = 1 
      THEN N'CHAR(13)+CHAR(10)+' + @CrLf 
      ELSE N''' ''+' 
      END 
     + CASE WHEN @OmmitInsertColumnList = 1 
      THEN N'' 
      ELSE N'''(' + @ColumnList + N')''+' + @CrLf 
      END 
     + CASE WHEN @FormatCode = 1 
      THEN N'CHAR(13)+CHAR(10)+' + @CrLf 
      ELSE N''' ''+' 
      END 
     + CASE WHEN @UseSelectSyntax = 1 
      THEN N'''' + @SelectSql + N'''+' 
      ELSE N'''' + @ValuesSql + N'''+' 
      END 
     + @CrLf 
     + @SelectList 
     + CASE WHEN @UseSelectSyntax = 1 
      THEN N'' 
      ELSE N'+' + @CrLf + N''')''' 
      END 
     + CASE WHEN @GenerateStatementTerminator = 1 
      THEN N'+'';''' 
      ELSE N'' 
      END 
     + CASE WHEN @GenerateGo = 1 
      THEN N'+' + @CrLf + N'CHAR(13)+CHAR(10)+' + @CrLf + N'''GO''' 
      ELSE N'' 
      END 
     ; 
    END ELSE BEGIN 
     SET @SelectList = 
     CASE WHEN @UseSelectSyntax = 1 
      THEN N'''' + @SelectSql + N'''+' 
      ELSE N'''(''+' 
      END 
     + @CrLf 
     + @SelectList 
     + CASE WHEN @UseSelectSyntax = 1 
      THEN N'' 
      ELSE N'+' + @CrLf + N''')''' 
      END 
     ; 
    END 

    SET @SelectStatement = N'SELECT' 
     + CASE WHEN NULLIF(@TopExpression,N'') IS NOT NULL 
     THEN N' TOP ' + @TopExpression 
     ELSE N'' END 
     + @CrLf + @SelectList + @CrLf 
     + N'FROM ' + @ObjectName 
     + CASE WHEN NULLIF(@FunctionParameters,N'') IS NOT NULL 
     THEN @FunctionParameters 
     ELSE N'' END 
     + CASE WHEN NULLIF(@SearchCondition,N'') IS NOT NULL 
     THEN @CrLf + N'WHERE ' + @SearchCondition 
     ELSE N'' END 
     + CASE WHEN NULLIF(@OrderByExpression,N'') IS NOT NULL 
     THEN @CrLf + N'ORDER BY ' + @OrderByExpression 
     ELSE N'' END 
     + @CrLf + N';' + @CrLf + @CrLf 
    ; 

    IF @Debug = 1 
    BEGIN 
     PRINT(@CrLf + N'--Select statement'); 
     PRINT(@SelectStatement); 
    END 

    INSERT INTO @TableData 
    EXECUTE (@SelectStatement); 

    IF @GenerateProjectInfo = 1 
    BEGIN 
     INSERT INTO @Results 
     SELECT N'--INSERTs generated by GenerateInsert (Build 6)' 
     UNION SELECT N'' 
    END 

    IF @GenerateSetNoCount = 1 
    BEGIN 
     INSERT INTO @Results 
     SELECT N'SET NOCOUNT ON' 
    END 

    IF @PopulateIdentityColumn = 1 
    BEGIN 
     INSERT INTO @Results 
     SELECT N'SET IDENTITY_INSERT ' + COALESCE(@TargetObjectName,@ObjectName) + N' ON' 
    END 

    IF @GenerateSingleInsertPerRow = 1 
    BEGIN 
     INSERT INTO @Results 
     SELECT TableRow 
     FROM @TableData 
    END ELSE BEGIN 
     IF @FormatCode = 1 
     BEGIN 
     INSERT INTO @Results 
     SELECT @InsertSql; 

     IF @OmmitInsertColumnList != 1 
     BEGIN 
      INSERT INTO @Results 
      SELECT N'(' + @ColumnList + N')'; 
     END 

     IF @UseSelectSyntax != 1 
     BEGIN 
      INSERT INTO @Results 
      SELECT N'VALUES'; 
     END 
     END ELSE BEGIN 
     INSERT INTO @Results 
     SELECT @InsertSql 
      + CASE WHEN @OmmitInsertColumnList = 1 THEN N'' ELSE N' (' + @ColumnList + N')' END 
      + CASE WHEN @UseSelectSyntax = 1 THEN N'' ELSE N' VALUES' END 
     END 

     SET @RowNo = 0; 
     DECLARE DataCursor CURSOR LOCAL FAST_FORWARD FOR 
     SELECT TableRow 
     FROM @TableData 
     FOR READ ONLY 
     ; 
     OPEN DataCursor; 
     FETCH NEXT FROM DataCursor INTO @TableRow; 

     WHILE @@FETCH_STATUS = 0 
     BEGIN 
     SET @RowNo = @RowNo + 1; 

     INSERT INTO @Results 
     SELECT 
      CASE WHEN @UseSelectSyntax = 1 
      THEN CASE WHEN @RowNo > 1 THEN N'UNION' + CASE WHEN @FormatCode = 1 THEN @CrLf ELSE N' ' END ELSE N'' END 
      ELSE CASE WHEN @RowNo > 1 THEN N',' ELSE N' ' END END 
      + @TableRow; 

     FETCH NEXT FROM DataCursor INTO @TableRow; 
     END 

     CLOSE DataCursor; 
     DEALLOCATE DataCursor; 

     IF @GenerateStatementTerminator = 1 
     BEGIN 
     INSERT INTO @Results 
     SELECT N';'; 
     END 

     IF @GenerateGo = 1 
     BEGIN 
     INSERT INTO @Results 
     SELECT N'GO'; 
     END 
    END 

    IF @PopulateIdentityColumn = 1 
    BEGIN 
     INSERT INTO @Results 
     SELECT N'SET IDENTITY_INSERT ' + COALESCE(@TargetObjectName,@ObjectName) + N' OFF' 
    END 

    IF @FormatCode = 1 
    BEGIN 
     INSERT INTO @Results 
     SELECT N''; -- An empty line at the end 
    END 

    IF @PrintGeneratedCode = 1 
    BEGIN 
     DECLARE @LongRows bigint; 
     SET @LongRows = (SELECT COUNT(*) FROM @Results WHERE LEN(TableRow) > 4000); 

     IF @LongRows > 0 
     AND @ShowWarnings = 1 
     BEGIN 
     PRINT(N'--*************************'); 
     IF @LongRows = 1 
      PRINT(N'--WARNING: ' + CONVERT(nvarchar(max), @LongRows) + N' Row is very long and will be chopped at every 4000 character.') 
     ELSE 
      PRINT(N'--WARNING: ' + CONVERT(nvarchar(max), @LongRows) + N' Rows are very long and will be chopped at every 4000 character.'); 
     PRINT(N'-- If this is an issue then the workaround is to use @PrintGeneratedCode = 0 and output "Result to Grid" in SSMS.'); 
     PRINT(N'--*************************'); 
     END 

     DECLARE ResultsCursor CURSOR LOCAL FAST_FORWARD FOR 
     SELECT TableRow 
     FROM @Results 
     FOR READ ONLY 
     ; 
     OPEN ResultsCursor; 
     FETCH NEXT FROM ResultsCursor INTO @TableRow; 

     WHILE @@FETCH_STATUS = 0 
     BEGIN 

     DECLARE @CurrentEnd bigint; -- track the length of the next sub-string 
     DECLARE @Offset tinyint; -- tracks the amount of offset needed 
     SET @TableRow = REPLACE(REPLACE(@TableRow, CHAR(13) + CHAR(10), CHAR(10)), CHAR(13), CHAR(10)); 

     WHILE LEN(@TableRow) > 1 
     BEGIN 
      IF CHARINDEX(CHAR(10), @TableRow) BETWEEN 1 AND 4000 
      BEGIN 
      SET @CurrentEnd = CHARINDEX(CHAR(10), @TableRow) - 1; 
      SET @Offset = 2; 
      END 
      ELSE 
      BEGIN 
      SET @CurrentEnd = 4000; 
      SET @Offset = 1; 
      END 

      PRINT(SUBSTRING(@TableRow, 1, @CurrentEnd)); 
      SET @TableRow = SUBSTRING(@TableRow, @CurrentEnd + @Offset, LEN(@TableRow)) 
     END 

     FETCH NEXT FROM ResultsCursor INTO @TableRow; 
     END 

     CLOSE ResultsCursor; 
     DEALLOCATE ResultsCursor; 
    END ELSE BEGIN 
     SELECT * 
     FROM @Results; 
    END 

    END 
    GO 
----============================== 
--ONCE SP Created run The following Code With Table_Name.. 


DECLARE @Name NVARCHAR(261)='Table_Name'; 
DECLARE TableCursor CURSOR LOCAL FAST_FORWARD FOR 
SELECT QUOTENAME(s.name) + '.' + QUOTENAME(t.name) ObjectName 
FROM sys.tables t 
    INNER JOIN sys.schemas s ON s.schema_id = t.schema_id 
WHERE t.name NOT LIKE 'sys%' AND t.name='Table_Name' 
FOR READ ONLY 
; 
OPEN TableCursor; 
FETCH NEXT FROM TableCursor INTO @Name; 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXECUTE dbo.GenerateInsert @ObjectName = @Name; 

    FETCH NEXT FROM TableCursor INTO @Name; 
END 

CLOSE TableCursor; 
DEALLOCATE TableCursor; 
+1

为此,您需要使用Union创建动态查询,这将允许您插入所有数据。 –

+0

我想你不太明白我的问题。我知道如何进行查询。我希望SSMS在不重复'INSERT'语句的情况下进行此查询 – Romczyk

+0

我已修改答案有一个look.hope,您将获得您的Desire输出 –