【发布时间】:2015-11-15 13:38:36
【问题描述】:
在 SQL Server 中,我希望每个SELECT 结果每次都在同一个表中插入三个新行,itemid = max itemid + counter。
例如:
(ItemID, PackageID, ItemTypeID, ServiceID, ItemName, CreatedDate)
VALUES
(17891, 5352, 7007, 2011, N'Firewall''s Lan NIC', '11/11/2015 6:50:51 PM'),
(17892, 5352, 7008, 2011, N'Firewall''s Mng NIC', '11/11/2015 6:50:51 PM'),
(17893, 5352, 7006, 2011, N'Firewall''s Wan NIC', '11/11/2015 6:50:51 PM')
- ItemID = 主键
- PackageID = 来自选择查询
- ItemTypeID = 原样
- ServiceID = 来自选择查询
- ItemName = 原样
- CreatedDate = 现在
我正在尝试这个循环遍历SELECT 结果。
DECLARE @item_id int,
@package_id nvarchar(50),
@itemtype_id varchar(80),
@item_name varchar(80),
@service_id nvarchar(50);
DECLARE @message nvarchar(150)
PRINT '-------- Service Items Report --------';
DECLARE serviceitems_cursor CURSOR FOR
SELECT PackageID, ItemID
FROM ServiceItems
WHERE ItemTypeID = '7004'
ORDER BY ItemID;
OPEN serviceitems_cursor
FETCH NEXT FROM serviceitems_cursor
INTO @package_id, @itemtype_id
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' '
SELECT @message = '-----Service Items from serviceitems_cursor - packageId: ' + @package_id
PRINT @message
-- I want here to add three new rows
-- For every new item row I want itemid to be SELECT MAX(ItemID) + thecounter FROM ServiceItems
-- /thecounter is the new counter after each insertion
FETCH NEXT FROM serviceitems_cursor
INTO @package_id, @itemtype_id
END
CLOSE serviceitems_cursor;
DEALLOCATE serviceitems_cursor;
如何执行所有新记录以获得当前最大 itemid + 计数器
SELECT MAX(ItemID) + 1 FROM ServiceItems )
例如,如果最大 itemId 为 17890,则新记录将有
17891, 17892, 17893
(前三行插入)
17894, 17895, 17896
(后三行插入)等
【问题讨论】:
-
听起来你想要一个触发器,而不是一个光标。
-
好的,@GordonLinoff 让我试试触发器。
-
或者您只是想要一个
identity列?
标签: sql sql-server cursor sql-insert