我正在使用SQL Server Management Studio 2017
。我在本地计算机上有一张桌子。假设其名称为Email
。在Email
表中,有一个列名Language
,其值可以为'en'
或'zh'
。在此Language
列旁边,还有更多列。
现在我的同事也具有相同的表,但机器不同,并且他只有Language
是en
的行。他还没有语言为zh
的行。
我如何使用该软件生成SQL脚本以将数据插入到他的表中,但是仅包含行where Language = 'zh'
,以便两个表都相同。
更清楚地说,我需要向他发送INSERT脚本,其中还包含数据值,以便他可以将INSERT插入他本地计算机中的数据库。
还是其他方式?
答案 0 :(得分:1)
这是您想要的吗?
insert into colleague.dbo.email ( . . . )
select . . .
from my.dbo.email
where language = 'zh';
答案 1 :(得分:0)
有两种方法-第一种是快速的并且不需要代码,但是您需要手动摆脱不需要的行,另一种更加灵活,但是您必须对其进行编码。您也可以使用第三方工具来完成此操作。
如果只想执行一次,则可以执行以下操作(这是来自不同版本的SSMS,但应该类似)
右键单击数据库,选择任务,选择生成脚本。然后选择所需的表,继续,然后在高级设置中找到“要编写脚本的数据类型”并将其更改为数据。这将生成一个脚本来加载表中的所有数据-您需要对其进行编辑以仅加载所需的行。
另一种选择是编写一个脚本,该脚本基本上可以制作自己想要的数据。您首先需要进行设置,如果要更改表格式,则需要对其进行调整,但是您可以编辑选择脚本,使其仅获取所需的数据。我确定您可以编写一个脚本来自动为您创建该脚本,但是我从来不需要它,因此我没有考虑过。
类似这样的东西
With baseRows as
(
--This bit gets the data you want
Select E.*
, ROW_NUMBER() over(ORDER BY ID) as RowNo
From dbo.Email E
Where E.Language = 'zh' -- whatever selection you need here
)
, selectRows as
(
--This bit creates the data select statments to set the data to import
Select
case when BR.RowNo = 1 then '' else 'Union All ' end
+ 'Select '
+ convert(varchar(10), BR.userID) + ' as userID, ' -- required integer example
+ case when BR.backupID is null then 'NULL' else CONVERT(varchar(10), BR.backupID) end + ' as backupID, ' -- nullable integer example
+ '''' + BR.Name + ''' as name, ' -- required nvarchar example
+ case when BR.groupname IS null then 'NULL' else '''' + BR.groupname + '''' end + ' as groupname, ' --nullable varchar example
+ CONVERT(varchar(2), BR.isActive) + ' as isActive, ' --bit example
as SQL
from baseRows BR
)
Select
--This creates the insert command row (top row) of the final query
'Insert into Email (
userID
, backupID
, name
, groupName
, IsActive
)' as SQL
UNION ALL
Select SQL from baseRows --and adds the data to the following rows
如果运行此脚本,则输出将是您想要将数据加载到另一台计算机上的脚本。
答案 2 :(得分:0)
右键单击数据库名称(数据库所在的表)--->任务--->生成脚本--->下一个--->选择特定的数据库对象--->选择表--->保存到文件= ADVANCED --->单击高级--->要编写脚本的数据类型=“仅数据” --->给出路径(存储插入命令的位置)