Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在sql子表中移植数据_Sql_Sql Server_Data Import - Fatal编程技术网

需要在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

需要在sql表中移植数据

我有一个带列的主表(
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
)