为选定的记录生成插入脚本?

sud*_*u63 37 sql database sql-server-2008

我有一个包含以下数据的表:

Pk_Id  ProductName           Fk_CompanyId       Price
------------------------------------------------------
1      AMX                   1                  10.00
2      ABC                   1                  11.00
3      APEX                  1                  12.00
4      AMX                   1                  10.00
5      ABC                   1                  11.00
6      APEX                  1                  12.00
7      AMX                   2                  10.00
8      ABC                   2                  11.00
9      APEX                  2                  12.00
Run Code Online (Sandbox Code Playgroud)

我想生成用于迁移Fk_CompanyId为1的记录的插入脚本.

有一个插入脚本选项可以为所有记录生成脚本,但我想过滤一些记录以迁移到另一个数据库.

Tam*_*mir 44

如果您使用的是SQL Management Studio,则可以右键单击数据库名称并选择"任务">"导入/导出数据",然后按照向导进行操作.
其中一个步骤称为"指定表复制或查询",其中有一个选项可以编写查询以指定要传输的数据,因此您只需指定以下查询:

select * from [Table] where Fk_CompanyId = 1
Run Code Online (Sandbox Code Playgroud)

  • 但是这个答案的解决方案不会像原始问题那样生成"插入"脚本.它只允许您使用查询来获取数据集,然后将数据集导出到目标,而不是插入脚本.我正在使用SSMS 2012. (17认同)
  • 这个答案没有解决“我想生成插入脚本”的需求,因此对社区没有帮助。我们如何从接受这个答案的OP那里扣分? (8认同)
  • @jyao正确,这不会给出插入查询.我所做的是将数据导出到我创建的新临时表中,然后使用数据库上的"生成脚本"选项从那里生成数据脚本.那只导出了所需的记录.这是一个相当麻烦但我还没有找到另一个选项来直接将记录导出到新查询. (3认同)
  • 有没有办法将INSERT查询作为结果? (3认同)

Aar*_*and 19

SELECT 'INSERT SomeOtherDB.dbo.table(column1,column2,etc.)
  SELECT ' + CONVERT(VARCHAR(12), Pk_Id) + ','
       + '''' + REPLACE(ProductName, '''', '''''') + ''','
       + CONVERT(VARCHAR(12), Fk_CompanyId) + ','
       + CONVERT(VARCHAR(12), Price) + ';'
FROM dbo.unspecified_table_name
WHERE Fk_CompanyId = 1;
Run Code Online (Sandbox Code Playgroud)

  • 对使用它的任何人都要注意:`select null +'x'`是'NULL`,所以不要忘记将`@sql`初始化为非空值,否则你的整个语句将连接到'NULL`.让我困惑了10分钟. (2认同)

小智 15

CREATE PROCEDURE sp_generate_insertscripts
(
    @TABLENAME VARCHAR(MAX),
    @FILTER_CONDITION VARCHAR(MAX)=''   -- where TableId = 5 or some value
)
AS
BEGIN

SET NOCOUNT ON

DECLARE @TABLE_NAME VARCHAR(MAX),
        @CSV_COLUMN VARCHAR(MAX),
        @QUOTED_DATA VARCHAR(MAX),
        @TEXT VARCHAR(MAX),
        @FILTER VARCHAR(MAX) 

SET @TABLE_NAME=@TABLENAME

SELECT @FILTER=@FILTER_CONDITION

SELECT @CSV_COLUMN=STUFF
(
    (
     SELECT ',['+ NAME +']' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @QUOTED_DATA=STUFF
(
    (
     SELECT ' ISNULL(QUOTENAME('+NAME+','+QUOTENAME('''','''''')+'),'+'''NULL'''+')+'','''+'+' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @TEXT='SELECT ''INSERT INTO '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER

--SELECT @CSV_COLUMN AS CSV_COLUMN,@QUOTED_DATA AS QUOTED_DATA,@TEXT TEXT

EXECUTE (@TEXT)

SET NOCOUNT OFF

END
Run Code Online (Sandbox Code Playgroud)

  • 请提供您的答案,并提供适当的说明和正确的对齐方式。仅发布代码是不够的。 (2认同)
  • 这太棒了。我注意到您需要在 TABLENAME 参数中添加一个空格,以便与 FILTER_CONDITION 连接时不会出错 (2认同)

ger*_*per 13

如果可能,请使用Visual Studio。自2014年3月发布以来,Microsoft SQL Server数据工具(SSDT)为此提供了内置功能:

  1. 打开Visual Studio
  2. 打开“查看”?“ SQL Server对象资源管理器”
  3. 将连接添加到服务器
  4. 展开相关的数据库
  5. 展开“表格”文件夹
  6. 右键单击相关表
  7. 从上下文菜单中选择“查看数据”
  8. 在新窗口中,使用工具栏中的“排序和过滤数据集”功能查看数据以应用过滤器。请注意,此功能是受限制的,您不能编写显式SQL查询。
  9. 应用过滤器后,仅看到所需的数据,请在工具栏中单击“脚本”或“脚本到文件”
  10. Voilà-在这里,您可以找到插入的数据过滤器

注意:请注意,“查看数据”窗口就像SSMS“编辑前200行”一样-您可以立即编辑数据

(带有Microsoft SQL Server数据工具(SSDT)版本14.0.60812.0和Microsoft SQL Server 2012的Visual Studio 2015的Testet)


ble*_*eah 5

您可以使用您的条件创建视图,然后导出视图?


Ste*_*ene 5

我最终分两步完成。将我想要的记录选择到数据库中的一个新表中,然后在 SSMS 中生成一个仅 SQL 数据的脚本。我确实找到并替换了生成的脚本并删除了表格。


JC *_*aja 5

在 SSMS 中执行您的 sql 查询。从结果窗口中选择所有单元格并复制值。转到下面的网站,在那里您可以粘贴复制的数据并生成 sql 脚本。您也可以将来自 SSMS 的查询结果保存为 CSV 文件并在网站中导入该 csv 文件。

http://www.convertcsv.com/csv-to-sql.htm


gol*_*mar 5

使用DBeaver客户端(支持 SQL Server),您可以对所需的记录执行 SELECT 查询,然后选择结果行,右键单击并复制为 SQL,您将在剪贴板中看到 INSERT 语句:

在此输入图像描述



HeidiSQL还支持连接到 SQL Server 并导出选定的行(您可以在 SQL 查询本身中过滤行,或检索所有行并在数据网格中选择它们):

在此输入图像描述