我想将数据从一个数据库...表获取到UPDATE脚本中,该脚本可以与另一个database..table一起使用。我不需要从DB1导入DB2,而是需要针对DB2运行UPDATE脚本。
如果上述情况不可行,有没有办法从DB1..table1生成UPDATE语法:
col1 = value1,
col2 = value2,
col3 = value3,
...
---编辑---
通过回答,我们假设DB1在DB2可用的同时可用。不是这种情况。每个数据库都不会知道另一个。这两个服务器/数据库不会同时可用/可访问。
是否可以将表数据编写为平面文件?不确定进入UPDATE语句会有多容易。
答案 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?