我还是T-SQL和SQL 2005的新手。我需要将database1中的表中的整数列导入到database2中的相同表(只缺少我需要的列)。两者都是sql 2005数据库。我在Server Management Studio中尝试了内置的import命令,但它迫使我复制整个表。这会导致由于约束和“只读”列导致的错误(sql2005中的“只读”意味着什么)。我只想抓一个列并将其复制到表格中。
必须有一种简单的方法来做到这一点。类似的东西:
INSERT INTO database1.myTable columnINeed
SELECT columnINeed from database2.myTable
答案 0 :(得分:5)
插入不会这样做,因为它会尝试在表的末尾插入新行。您尝试做的事情是在现有行的末尾添加一列。
我不确定语法是否完全正确但是,如果我理解你,那么这将完成你所追求的目标。
在database2中创建允许空值的列。
执行更新:
更新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
答案 1 :(得分:2)
只要两个数据库位于同一台服务器上,就会有一种非常类似的简单方法。完全限定名称是dbname.owner.table - 通常所有者是dbo,并且“.dbo”有一个快捷方式。这是“......”,所以......
INSERT INTO Datbase1..MyTable
(ColumnList)
SELECT FieldsIWant
FROM Database2..MyTable
答案 2 :(得分: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在一个语句中所做的相同事情而没有增加复杂性。
答案 3 :(得分: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
答案 4 :(得分:1)
MERGE仅适用于SQL 2008 NOT SQL 2005
答案 5 :(得分:0)
插入Test2.dbo.MyTable(MyValue)从Test1.dbo.MyTable中选择MyValue
这是假设很多。首先,目标数据库为空。其次,其他列可以为空。您可能需要更新。要做到这一点,你需要有一个共同的密钥。