我正在尝试更新SQL数据库中的一些预算数据。我有一个表,这是今年的数据集,另一个表包含去年(我需要将这些年数据插入)。
在插入期间,我需要为临时表中的每个站点编号创建一个唯一的行,针对每个站点编号需要是今年的信息(周编号,开始日期,结束日期等)。
我已经尝试使用子查询(但显然这会失败,因为获取站点号的子查询将返回多个记录。所以我正在尝试cursor
,但是虽然它没有错误,但它没有插入任何约会。如果有人有任何想法,那将是伟大的。
这是我的cursor code
create table #tempSiteNoTable (SiteNo int)
insert into #tempSiteNoTable
Select distinct(SiteNumber)
from Lynx_Period_Lookup
begin tran xxx
Declare @SiteNNo int
Declare SiteNumberCursor Cursor FOR
Select
SiteNo from #tempSiteNoTable where SiteNo = @SiteNNo
Open SiteNumberCursor
Fetch next from SiteNumberCursor
Into @SiteNNo while @@fetch_status = 0
begin
insert into Lynx_Period_Lookup
(SiteNumber,SubPeriod,StartDate,EndDate,[Year],Period,[Week],BusinessCalendarNumber,BusinessCalendarName)
Select
@SiteNNo,
SubPeriod,
StartDate,
EndDate,
2014 as year,
Period,
WeekNo,
BusinessCalendarNumber,
BusinessCalendarName
from accountingperiods
Fetch next from SiteNumberCursor
into @SiteNNo
End
Close SiteNumberCursor
Deallocate SiteNumberCursor
答案 0 :(得分:0)
你应该能够没有游标 - 而且非常容易!
试试这个:
CREATE TABLE #tempSiteNoTable (SiteNo int)
INSERT INTO #tempSiteNoTable(SiteNo)
SELECT DISTINCT (SiteNumber)
FROM dbo.Lynx_Period_Lookup
INSERT INTO dbo.Lynx_Period_Lookup(SiteNumber, SubPeriod, StartDate, EndDate, [Year], Period, [Week], BusinessCalendarNumber, BusinessCalendarName)
SELECT
t.SiteNo,
ap.SubPeriod,
ap.StartDate,
ap.EndDate,
2014 as year,
ap.Period,
ap.WeekNo,
ap.BusinessCalendarNumber,
ap.BusinessCalendarName
FROM
#tempSiteNoTable t
INNER JOIN
dbo.AccountingPeriods ap ON ... (how are those two sets of data related?)...
我不知道的唯一一点 - AccountingPeriods
和#tempSiteNoTable
如何相关 - 他们共享哪些共同专栏?
这就是它的全部 - 没有游标,没有乱搞逐行激动行(RBAR)处理 - 只有一个,漂亮,干净基于集合强烈的声明,你已经完成了
答案 1 :(得分:0)
我认为你正在寻找一个CROSS JOIN;尝试下面的代码片段。
DECLARE @Table1 TABLE (Week int, StartDate datetime)
DECLARE @Table2 TABLE (sitenumber int)
INSERT INTO @Table1 (Week, StartDate)
VALUES (1, '2014-01-01'), (2, '2014-01-08')
INSERT INTO @Table2 (sitenumber)
VALUES (1), (2)
SELECT *
FROM @Table1 CROSS JOIN @Table2