2008-09-09 67 views
2

对于T-SQL和SQL 2005,我还是比较新的。我需要将database1中的表中的整数列导入到相同的表中(仅缺少我需要的列) DATABASE2。两者都是sql 2005数据库。我已经尝试了Server Management Studio中的内置导入命令,但它迫使我复制整个表。这会导致由于约束和'只读'列造成的错误(无论'只读'在sql2005中意味着什么)。我只想抓住一个列并将其复制到一个表格中。SQL 2005在数据库之间复制单列

必须有一个简单的方法来做到这一点。喜欢的东西:

INSERT INTO database1.myTable columnINeed 
SELECT columnINeed from database2.myTable 

回答

5

插入不会这样做,因为它会尝试在表的末尾插入新行。听起来你想要做的是在现有行的末尾添加一列。

我不确定语法是否完全正确,但如果我理解了你,那么这将会做你以后的事情。

  1. 创建允许数据库2中的空值的列。

  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

0

INSERT INTO Test2.dbo.MyTable(myvalue的)选择myvalue的从Test1.dbo.MyTable

这是假设很大。首先,目标数据库是空的。其次,其他列可以为空。您可能需要更新。要做到这一点,你需要有一个共同的密钥。

2

只要两个数据库位于同一台服务器上,就有一种非常简单的方法。完全限定的名称是dbname.owner.table - 通常所有者是dbo,并且存在“.dbo”的快捷方式。这是...“,所以...

INSERT INTO Datbase1..MyTable 
    (ColumnList) 
SELECT FieldsIWant 
    FROM Database2..MyTable 
1

您也可以使用游标。假设你想要遍历所有记录在第一表和填充新行的第二个表,然后像这将是要走的路:

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 
2

首先创建列,如果它不存在:

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确实在一个声明中没有添加更强大复杂。

+0

有趣。我不知道合并。凉 – 2008-09-10 18:51:40

1

MERGE仅适用于SQL 2008 NOT SQL 2005