0

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

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

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

- - 编辑 - -

查看答案,假设 DB1 在 DB2 可用的同时可用。不是这种情况。每个数据库都不知道对方。两个服务器/数据库将不能同时可用/可访问。

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

4

5 回答 5

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

这里还有一个链接,指向我写的关于从查询生成多个 SQL 语句的博客。它比您尝试创建的语句类型更简单,但它应该给您一个想法。另外这里是我写的一篇关于在 SQL 中使用单引号的文章。除此之外,你可以去谷歌搜索“SQL Server Dynamic SQL”,你会得到数百个关于这个主题的博客、文章、论坛条目等。

于 2013-04-01T15:30:44.580 回答
0

您的问题需要进一步澄清才能完全理解您要完成的工作,但假设数据库位于同一台服务器上,那么您应该能够使用UPDATEand执行以下操作JOIN

UPDATE a
SET col1 = value1, col2 = value2
FROM database1.schema.table a
    JOIN database2.schema.table b
        ON a.primaryKey = b.primaryKey

或者,如果它们在不同的服务器上,您可以设置一个链接服务器,它应该可以类似地工作。

于 2013-04-01T15:10:02.767 回答
0

我想你还是想INSERT从一个表进入另一个数据库的另一个表。您可以使用INSERT INTO..SELECT

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

假设dbo是使用的架构。

于 2013-04-01T15:10:14.670 回答
0

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

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

如果它们不在同一台服务器上,则可以使用linked servers.

于 2013-04-01T15:10:45.357 回答
0

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

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

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

我认为这是因为您不能从 SELECT 执行正常的 UPDATE?

于 2013-04-01T15:12:37.803 回答