如何创建一存储过程,根据表数据生成sql脚本(形如insert into 表名 values(字段数据))?(100分)

H

halen

Unregistered / Unconfirmed
GUEST, unregistred user!
我们数据库培训后有一道题:创建一存储过程,根据表数据生成sql脚本(形如insert into 表名 values(字段数据)),
可以用此脚本重新生成表数据。
我的思路是:表名为输入参数,根据表名可得到字段数,声明相应数目的变量,然后声明并打开游标:
create proc Proc_ReFillData(@Table_Name nvarchar(30),@sql nvarchar(1024))
AS

declare @temp_ID int
declare @FieldNum int

SELECT @temp_ID=OBJECT_ID('test..'+@Table_Name)
select @FieldNum=count(*) from syscolumns where id=@temp_ID
while @FieldNum>1
begin
declare '@Field'+@FieldNum nvarchar(30)
@FieldNum=@FieldNum-1
end
declare ReFillData CURSOR
FOR
select * from @Table_Name
OPEN ReFillData
FETCH NEXT FROM ReFillData into @Field1, @Field2,@Field3... --但因为字段数不固定,这个地方如何写?
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM GetTableStru into @Field1, @Field2,@Field3... --还有这里
--另外,如何返回由@Field1, @Field2...组成的sql语句?
END
CLOSE GetTableStru
DEALLOCATE GetTableStru

烦请各位大虾帮忙。
 
->创建一存储过程,根据表数据生成sql脚本(形如insert into [red]表名[/red] values([gold]字段数据[/gold])),
这题目是不是有点模糊??表名和字段数据是从哪里来?
这种题目最好有个示例才好回答!!
 
演示:
USE PUBS
Proc_ReFillData stores
Proc_ReFillData publishers

存储过程:

DROP PROC Proc_ReFillData
GO
Create proc Proc_ReFillData(@Table_Name nvarchar(30))
AS

declare @temp_ID int
declare @FieldNum int
declare @FieldCnt int

DECLARE @FieldName VARCHAR(50)
DECLARE @L_SQL VARCHAR(1000)

SET @L_SQL = ''
SET @FieldCnt = 0
SELECT @temp_ID =ID FROM SYSOBJECTS WHERE NAME = @Table_Name and tYPE = 'U'

select @FieldNum=Count(*) from syscolumns where id=@temp_ID

declare ReFillData CURSOR FOR
SELECT NAME from syscolumns where ID = @temp_ID

OPEN ReFillData

FETCH NEXT FROM ReFillData into @FieldName

WHILE @@FETCH_STATUS = 0
BEGIN
SET @FieldCnt = @FieldCnt + 1
SET @L_SQL = @L_SQL + @FieldName --此处须进行类型判断后加入类型转换
IF @FieldCnt < @FieldNum --自己搞定啦
SET @L_SQL = @L_SQL + '+'',''+'
FETCH NEXT FROM ReFillData into @FieldName
END
CLOSE ReFillData
DEALLOCATE ReFillData

SET @l_SQL = 'SELECT ''INSERT INTO '+@Table_Name+' VALUES(''+'+@L_SQL+'+'');'''+' FROM '+@Table_Name
EXEC (@L_SQL)


 
顶部