将结果集从SQL导出到Insert语句的工具?

时间:2009-06-15 19:51:33

标签: sql sql-server

我想从SQL Server导出ad hoc Select查询结果集,以便直接导出为Insert Statements。

当您在SSMS中单击鼠标右键时,我希望看到“另存为”选项“插入..”以及其他当前可用选项(csv,txt)。我没有从现有的物理表导出,我没有权限创建新表,所以脚本物理表的选项不适合我。

我必须从临时表或查询窗口中的结果集编写脚本。

现在我可以导出到csv,然后将该文件导入另一个表,但这对于重复性工作来说非常耗时。

该工具必须创建正确的插入,并在为NULL值创建值时理解数据类型。

9 个答案:

答案 0 :(得分:13)

就个人而言,我只想对表编写一个选择并自己生成插入。一块蛋糕。

例如:

SELECT  'insert into [pubs].[dbo].[authors](
                    [au_id], 
                    [au_lname], 
                    [au_fname], 
                    [phone], 
                    [address], 
                    [city], 
                    [state], 
                    [zip], 
                    [contract])
    values( ''' + 
    [au_id] + ''', ''' + 
    [au_lname] + ''', ''' +
    [au_fname] + ''', ''' +
    [phone] + ''', ''' +
    [address] + ''', ''' +
    [city] + ''', ''' +
    [state] + ''', ''' +
    [zip] + ''', ' +
    cast([contract] as nvarchar) + ');'
FROM    [pubs].[dbo].[authors]

将产生

insert into [pubs].[dbo].[authors](
                    [au_id], 
                    [au_lname], 
                    [au_fname], 
                    [phone], 
                    [address], 
                    [city], 
                    [state], 
                    [zip], 
                    [contract])
    values( '172-32-1176', 'White', 'Johnson', '408 496-7223', '10932 Bigge Rd.', 'Menlo Park', 'CA', '94025', 1);
insert into [pubs].[dbo].[authors](
                    [au_id], 
                    [au_lname], 
                    [au_fname], 
                    [phone], 
                    [address], 
                    [city], 
                    [state], 
                    [zip], 
                    [contract])
    values( '213-46-8915', 'Green', 'Marjorie', '415 986-7020', '309 63rd St. #411', 'Oakland', 'CA', '94618', 1);
... etc ...

一些陷阱:

  1. 别忘了包裹你的单身 引号
  2. 这假设一个干净的数据库和 不是SQL注入安全。

答案 1 :(得分:11)

查看SSMS的SSMS Tools Pack添加内容,它可以让您完成所需的操作。

答案 2 :(得分:4)

注意!!!按原样。在脚本的开头,您可以看到如何使用过程的示例。当然,如果需要或者为所需的转换添加DataTypes,您可以进行INSERT表达。

脚本的结果是使用UNION ALL合并SELECT表达式。 小心整理数据库。我没有比我需要的更多地测试其他校对。

对于长期字段我建议在结果网格中使用 [保存结果为..] 而不是复制。因为你可能会得到切割的剧本。

server {...}

答案 3 :(得分:3)

这不是OP所要求的,但如果您想为表中的所有记录生成insert脚本,您可以在SSMS中执行此操作(至少2012年 - 可能是旧版本)没有任何额外的附加组件。

右键单击包含数据表的数据库,然后点击 Tasks>生成脚本。您将被带到一个向导,如下所示。

如果显示第一个屏幕,只需点按“下一步”。 Just hit Next if this first screen is displayed.

选择要为其生成脚本的表格。 Select the table(s) for which you would like to generate the script.

选择您希望脚本输出的方式。 Select how you want your script outputted. (I like the "new query window" option)
我喜欢"新的查询窗口"选项。

点击“高级”按钮并选择仅限数据 要编写脚本的数据类型 Hit the Advanced button and select "Data only" for "Types of data to script"
您可能需要查看选项以查看是否还有其他要修改的内容。完成后点击确定。

点击下一步,直到进入此屏幕。一切都变绿了,你就会拥有insert脚本! Hit Next until you get to this screen. Once everything goes green you'll have your script! 我喜欢在测试我的脚本时打开这个屏幕,看看是否需要进行任何调整。

答案 4 :(得分:2)

我知道这不是你想要的,但你可以插入一个选择语句:

INSERT INTO tbl(a,b) SELECT c,d FROM tbl2 WHERE c IN(...)

显然这是非常粗糙的,但我希望这是我想说的内容的重点。

答案 5 :(得分:2)

Squirrel SQL也可以这样做。

编写SQL查询,执行它以进行测试。然后突出显示它,并选择Script / Insert语句(不记得确切的措辞)。

答案 6 :(得分:1)

www.synametrics.com上的WinSQL具有该功能,非常方便。不确定该功能是否在免费版本中 - 但无论如何您都可以使用专业版试用30天。

对于任何ODBC连接的数据库,它都是一个非常方便易用的查询工具。

答案 7 :(得分:1)

TOAD可以从数据网格“另存为”菜单执行此操作。

答案 8 :(得分:0)

我为这个问题编写了一个脚本,可以在任何表上运行。 (我说“应该”,因为脚本没有100%经过测试,但仍然有点粗糙。)你可以在http://www.jessemclain.com/downloads/code/sql/spd_Tool_Get_Insert_Into_Values.sql.txt找到它

托管公司附加的文件底部有一些垃圾,只是剥掉了。要运行,只需将@Source_Table的值更改为您的表。

注意:我发布的文本文件在Firefox 3.0.11中呈现,但在IE7中没有。