Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 server SQL中的动态插入脚本_Sql Server_Insert_Archive_Procedure - Fatal编程技术网

Sql server SQL中的动态插入脚本

Sql server SQL中的动态插入脚本,sql-server,insert,archive,procedure,Sql Server,Insert,Archive,Procedure,有没有办法从SQL中的存储过程创建动态插入脚本 我被要求创建一个归档功能,它应该选择一个日期范围,创建该范围内所有行的INSERT语句,并浏览所有外键,为那些“依赖项”表生成级联插入脚本 这有可能吗?我正在对此进行研究,但找不到任何结果。如果您试图从其他表中动态执行插入操作,则可以结合使用INSERT和SELECT语句。我不确定这是否是你想要的 例如: 这是最难的一个。您只想将不存在的国家/地区添加到存档中。当然,这里有更多的剥猫皮的方法,这只是阐明了方法 INSERT INTO Country

有没有办法从SQL中的存储过程创建动态插入脚本

我被要求创建一个归档功能,它应该选择一个日期范围,创建该范围内所有行的INSERT语句,并浏览所有外键,为那些“依赖项”表生成级联插入脚本


这有可能吗?我正在对此进行研究,但找不到任何结果。

如果您试图从其他表中动态执行插入操作,则可以结合使用INSERT和SELECT语句。我不确定这是否是你想要的

例如:

这是最难的一个。您只想将不存在的国家/地区添加到存档中。当然,这里有更多的剥猫皮的方法,这只是阐明了方法

INSERT INTO Country_Archive(Id, Name)  -- INSERT INTO THE archive
SELECT Country.CountryId, Country.Name FROM Person  -- SELECT rows
JOIN Country ON CountryID.Id = Person.CountryId -- Join on Country to get Country Name
WHERE CreatedAt BETWEEN '2016-01-25  00:00:00' AND '2016-12-25 23:59:59'
-- Criteria for query
AND (SELECT COUNT(*) FROM Country_Archive WHERE Country_Archive.Id = Person.CountryID) = 0)
-- This checks to see if CountryId hasn't already been added
GROUP BY Country.CountryId, Country.Name  -- This get unique records only, i.e. if multiple users have same country.

FK列是否也要生成动态?还是在一代人的时候就知道了?无论如何,您可以从selects(结果中每行插入一个)生成一个字符串形式的语句,然后使用sp_executesql执行生成的字符串。这就是您想要实现的吗?是否有使用动态sql的原因?我想你可以不用它来做这件事。例如,如果我选择:
SELECT Id,Name,CountryId FROM Person WHERE CreatedAt FROM'2016-01-25 00:00:00'和'2016-12-25 23:59:59'
生成的脚本应该是:
INSERT INTO Country(Id,Name)value(45,'意大利')INSERT INTO Country(Id,Name)value(46,'法国')插入个人(Id,姓名,CountryId)值(34,John,45)插入个人(Id,姓名,CountryId)值(35,Claudia,46)插入个人(Id,姓名,CountryId)值(36,Andrew,45)
,依此类推找到任何FK。可能吗?熟练地。写起来容易吗?不,容易维护吗?没有。你可以使用第三方工具为你存档数据吗?绝对是。值得花点时间写你自己的吗?可能不会。
INSERT INTO Country_Archive(Id, Name)  -- INSERT INTO THE archive
SELECT Country.CountryId, Country.Name FROM Person  -- SELECT rows
JOIN Country ON CountryID.Id = Person.CountryId -- Join on Country to get Country Name
WHERE CreatedAt BETWEEN '2016-01-25  00:00:00' AND '2016-12-25 23:59:59'
-- Criteria for query
AND (SELECT COUNT(*) FROM Country_Archive WHERE Country_Archive.Id = Person.CountryID) = 0)
-- This checks to see if CountryId hasn't already been added
GROUP BY Country.CountryId, Country.Name  -- This get unique records only, i.e. if multiple users have same country.