SQL 2005在数据库之间复制单列
对于T-SQL和SQL 2005,我还是比较新的。我需要将database1中的表中的整数列导入到相同的表中(仅缺少我需要的列) DATABASE2。两者都是sql 2005数据库。我已经尝试了Server Management Studio中的内置导入命令,但它迫使我复制整个表。这会导致由于约束和'只读'列造成的错误(无论'只读'在sql2005中意味着什么)。我只想抓住一个列并将其复制到一个表格中。SQL 2005在数据库之间复制单列
必须有一个简单的方法来做到这一点。喜欢的东西:
INSERT INTO database1.myTable columnINeed
SELECT columnINeed from database2.myTable
插入不会这样做,因为它会尝试在表的末尾插入新行。听起来你想要做的是在现有行的末尾添加一列。
我不确定语法是否完全正确,但如果我理解了你,那么这将会做你以后的事情。
创建允许数据库2中的空值的列。
-
执行更新:
UPDATE database2.dbo.tablename SET database2.dbo.tablename.colname = database1.dbo.tablename.colname FROM database2.dbo.tablename INNER JOIN database1.dbo.tablename ON database2.dbo.tablename.keycol = database1.dbo.tablename.keycol
INSERT INTO Test2.dbo.MyTable(myvalue的)选择myvalue的从Test1.dbo.MyTable
这是假设很大。首先,目标数据库是空的。其次,其他列可以为空。您可能需要更新。要做到这一点,你需要有一个共同的密钥。
只要两个数据库位于同一台服务器上,就有一种非常简单的方法。完全限定的名称是dbname.owner.table - 通常所有者是dbo,并且存在“.dbo”的快捷方式。这是...“,所以...
INSERT INTO Datbase1..MyTable
(ColumnList)
SELECT FieldsIWant
FROM Database2..MyTable
您也可以使用游标。假设你想要遍历所有记录在第一表和填充新行的第二个表,然后像这将是要走的路:
DECLARE @FirstField nvarchar(100)
DECLARE ACursor CURSOR FOR
SELECT FirstField FROM FirstTable
OPEN ACursor
FETCH NEXT FROM ACursor INTO @FirstField
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO SecondTable (SecondField) VALUES (@FirstField)
FETCH NEXT FROM ACursor INTO @FirstField
END
CLOSE ACursor
DEALLOCATE ACursor
首先创建列,如果它不存在:
ALTER TABLE database2..targetTable
ADD targetColumn int null -- or whatever column definition is needed
由于您使用的是Sql Server 2005,因此您可以使用新的MERGE语句。 MERGE声明的优点是能够在一条语句中处理所有情况像来自源的缺失行(可以插入),缺少来自目标的行(可以执行删除),匹配行(可以执行更新)以及所有内容是在一次交易中完成的。例如:
MERGE database2..targetTable AS t
USING (SELECT sourceColumn FROM sourceDatabase1..sourceTable) as s
ON t.PrimaryKeyCol = s.PrimaryKeyCol -- or whatever the match should be bassed on
WHEN MATCHED THEN
UPDATE SET t.targetColumn = s.sourceColumn
WHEN NOT MATCHED THEN
INSERT (targetColumn, [other columns ...]) VALUES (s.sourceColumn, [other values ..])
MERGE语句就是为解决像你这样的情况下,我建议使用它,这比使用多个SQL批处理报表解决方案,基本上完成同样的事情MERGE确实在一个声明中没有添加更强大复杂。
MERGE仅适用于SQL 2008 NOT SQL 2005
有趣。我不知道合并。凉 – 2008-09-10 18:51:40