从Sql Server 数据库中 A表插入的B表
--
Insert into A(id,name)
select 'MaxID ',Name from B
--关键是这个 'MaxID ' 不在B表中,我是用这个存储过程 计算的ID
-----------------------
ALTER PROCEDURE dbo.alloc_id
@tbname VARCHAR(32)
AS
BEGIN
BEGIN TRANSACTION
UPDATE table_alloc_id SET id = id + 1 WHERE tablename = @tbname
IF @@rowcount = 0
BEGIN
INSERT INTO table_alloc_id VALUES(@tbname, 1)
END
SELECT id FROM table_alloc_id WHERE tablename = @tbname
COMMIT TRANSACTION
END
------------------------------
比如B表中有50条数据,那么上面这个alloc_id 存储过程就应该循环计算id,并插入到A表中?
请问该怎么写SQL 语句?
------解决方案-------------------- declare @name
declare my_cursor cursor scroll dynamic
for
SELECT name
FROM B
open my_cursor--打开游标
fetch next from my_cursor into @name
while(@@fetch_status=0)
begin
exec alloc_id 'B ',@this_id output--存储过程,用来生成表id
Insert into A(id,name)
select @this_id,name
from B
where current of my_cursor
fetch next from my_cursor into @name
end
close my_cursor--关闭游标
DEALLOCATE my_cursor--删除游标
ALTER PROCEDURE dbo.alloc_id
@tbname varchar(32)
@get_id varchar(50) output
AS
BEGIN
BEGIN TRANSACTION
UPDATE table_alloc_id SET id = id + 1 WHERE tablename = @tbname
IF @@rowcount = 0
BEGIN
INSERT INTO table_alloc_id VALUES(@tbname, 1)
END
SELECT @get_id=max(id) FROM table_alloc_id WHERE tablename = @tbname
COMMIT TRANSACTION
END