如何从导出的数据创建UPDATE?

时间:2013-04-01 15:06:20

标签: sql-server

我想将数据从一个数据库...表获取到UPDATE脚本中,该脚本可以与另一个database..table一起使用。我不需要从DB1导入DB2,而是需要针对DB2运行UPDATE脚本。

如果上述情况不可行,有没有办法从DB1..table1生成UPDATE语法:

col1 = value1,
col2 = value2,
col3 = value3,
...

---编辑---

通过回答,我们假设DB1在DB2可用的同时可用。不是这种情况。每个数据库都不会知道另一个。这两个服务器/数据库不会同时可用/可访问。

是否可以将表数据编写为平面文件?不确定进入UPDATE语句会有多容易。

5 个答案:

答案 0 :(得分:1)

如上所述,使用链接服务器和更新语句将是最简单的解决方案,但我确实理解有时这是不可能的。以下是动态构建更新语句的示例。我假设“SourceData”表中没有SQL注入的可能性。如果存在这种可能性,那么您将需要使用相同的技术来构建使用sp_executesql和参数的语句。

SELECT 'UPDATE UpdateTable ' +
    '  SET FieldToUpdate1 = ''' + SourceData.DataToUpdate1 + '''' +
    '     , FieldToUpdate2 = ' + CAST(SourceData.DataToUpdate2 AS varchar) +
    ' WHERE UpdateTable.PrimaryKeyField1 = ' + CAST(SourceData.PrimaryKey1 AS varchar) +
    '   AND UpdateTable.PrimaryKeyField2 = ''' + SourceData.PrimaryKey2 + ''''
FROM SourceData

此处还有我在Generating multiple SQL statements from a query上写的博客的链接。它比你想要创建的语句类型更简单,但它应该给你一个想法。这里还有一篇我用Single Quotation Marks in SQL写的文章。除此之外,您可以访问Google并搜索“SQL Server动态SQL”,您将获得数百个关于该主题的博客,文章,论坛条目等。

答案 1 :(得分:0)

您的问题需要更多澄清才能完全理解您要完成的任务,但假设数据库位于同一台服务器上,那么您应该可以使用UPDATE和{{ 1}}:

JOIN

或者,如果它们位于不同的服务器上,您可以设置链接服务器,它应该可以正常工作。

答案 2 :(得分:0)

我认为您仍然希望INSERT从一个表到另一个数据库的另一个表。您可以使用INSERT INTO..SELECT

INSERT INTO DB2.dbo.TableName(Col1, Col2, Col3) -- specify columns
SELECT Col1, Col2, Col3
FROM   DB1.dbo.TableName

假设dbo是使用的架构。

答案 3 :(得分:0)

两个数据库是否在同一个SQL-Server上?在这种情况下,请使用完全限定的表名。即:

Update Database1.Schema.Table
SET ...
FROM
Database2.Schema.Table

如果他们不在同一台服务器上,那么您可以使用linked servers

答案 4 :(得分:0)

我不确定SQL服务器语法,但您可以执行类似的操作来生成更新语句。

SELECT 'UPDATE mytable SET col1=' || col1 || ' WHERE pk=' primaryKey ||';' FROM mytable;

显然,您需要根据值类型转义引号等。

我认为这是因为你无法从SELECT中进行正常的UPDATE?