需要在sql子表中移植数据
需要在sql表中移植数据 我有一个带列的主表(需要在sql子表中移植数据,sql,sql-server,data-import,Sql,Sql Server,Data Import,需要在sql表中移植数据 我有一个带列的主表(masterid,masterdata,year)。这里的masterid是一个标识列 我有2012年的数据。我需要为2013年提供相同的2012年数据 我可以通过运行如下SQL语句来解决此问题: INSERT INTO mastertable SELECT masterdata, 2013 FROM mastertable WHERE Year = 2012 我想运行类似的运行儿童表也 我的子表结构是:(childid、mast
masterid,masterdata,year
)。这里的masterid
是一个标识列
我有2012年的数据。我需要为2013年提供相同的2012年数据
我可以通过运行如下SQL语句来解决此问题:
INSERT INTO mastertable
SELECT masterdata, 2013
FROM mastertable WHERE Year = 2012
我想运行类似的运行儿童表也
我的子表结构是:(childid、masterid、childdata
)
这里我有2012年的子数据,我希望在第一步中为2013年的主数据创建适当的
masterid
,以获得2013年的类似数据
最好我想有一个解决方案,而不添加额外的临时列
非常感谢任何线索
问候,,
Kumar。您需要存储在
主表中创建的2013和2012记录之间的链接。如果希望在不添加任何额外临时列的情况下实现这一点,则需要使用T-SQL
(我猜masterdata的类型是varchar(max)
,因为您没有指定它的类型)
假设ChildId
是自动递增的标识列
您可以将它们封装在函数/存储过程中,而不需要临时表
已更新
Declare @Year int
SET @Year = 2011
INSERT INTO MasterTable
SELECT masterdata, 2013
FROM mastertable WHERE Year = @Year
INSERT INTO childtable
SELECT SCOPE_IDENTITY(), c.childdata
FROM childtable c
WHERE masterid in
(
SELECT masterid
FROM masterTable
WHERE Year = @Year
)
“这里我有2012年的子数据,我想有2013年的类似数据,在第一步中为2013年的主数据创建适当的masterid。”2013年我在mastertable中创建了行,这不是很清楚。我需要使用在主表中创建的正确主ID复制子表中的数据,因为子表引用了主表。这不会设置正确的childtable。主ID
值,它们仍将指向2012记录。您的查询实际上是复制已有的childtable
数据。您的解决方案绝对正确。检查任何选项以避免临时表和while循环。@kumar:据我所知,没有临时表或创建临时列是不可能的。
Declare @Year int
SET @Year = 2011
INSERT INTO MasterTable
SELECT masterdata, 2013
FROM mastertable WHERE Year = @Year
INSERT INTO childtable
SELECT SCOPE_IDENTITY(), c.childdata
FROM childtable c
WHERE masterid in
(
SELECT masterid
FROM masterTable
WHERE Year = @Year
)