我想从SQL Server导出ad hoc Select查询结果集,以便直接导出为Insert Statements。
当您在SSMS中单击鼠标右键时,我希望看到“另存为”选项“插入..”以及其他当前可用选项(csv,txt)。我没有从现有的物理表导出,我没有权限创建新表,所以脚本物理表的选项不适合我。
我必须从临时表或查询窗口中的结果集编写脚本。
现在我可以导出到csv,然后将该文件导入另一个表,但这对于重复性工作来说非常耗时。
该工具必须创建正确的插入,并在为NULL值创建值时理解数据类型。
答案 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 :(得分:11)
查看SSMS的SSMS Tools Pack添加内容,它可以让您完成所需的操作。
答案 2 :(得分:4)
注意!!!按原样。在脚本的开头,您可以看到如何使用过程的示例。当然,如果需要或者为所需的转换添加DataTypes,您可以进行INSERT表达。
脚本的结果是使用UNION ALL合并SELECT表达式。 小心整理数据库。我没有比我需要的更多地测试其他校对。
对于长期字段我建议在结果网格中使用 [保存结果为..] 而不是复制。因为你可能会得到切割的剧本。
server {...}
答案 3 :(得分:3)
这不是OP所要求的,但如果您想为表中的所有记录生成insert
脚本,您可以在SSMS中执行此操作(至少2012年 - 可能是旧版本)没有任何额外的附加组件。
右键单击包含数据表的数据库,然后点击 Tasks>生成脚本。您将被带到一个向导,如下所示。
如果显示第一个屏幕,只需点按“下一步”。
选择要为其生成脚本的表格。
选择您希望脚本输出的方式。
我喜欢"新的查询窗口"选项。
点击“高级”按钮并选择仅限数据 要编写脚本的数据类型
您可能需要查看选项以查看是否还有其他要修改的内容。完成后点击确定。
点击下一步,直到进入此屏幕。一切都变绿了,你就会拥有insert
脚本!
我喜欢在测试我的脚本时打开这个屏幕,看看是否需要进行任何调整。
答案 4 :(得分:2)
我知道这不是你想要的,但你可以插入一个选择语句:
INSERT INTO tbl(a,b) SELECT c,d FROM tbl2 WHERE c IN(...)
显然这是非常粗糙的,但我希望这是我想说的内容的重点。
答案 5 :(得分:2)
Squirrel SQL也可以这样做。
编写SQL查询,执行它以进行测试。然后突出显示它,并选择Script / Insert语句(不记得确切的措辞)。
答案 6 :(得分:1)
对于任何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中没有。