这是我写的存储过程,希望能解决你的问题,~貌似以前回答过类似问题
先要创建一张保存结果的数据表,脚本如下
CREATE TABLE [dbo].[out_data](
[flag] [int] NULL,
[tb_name] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,
[insert_info] [varchar](8000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
--然后创建过程
--[out_table_data] 'net_code'
create proc [dbo].[out_table_data]
@tb_name varchar(1000)--表名称
as
declare @str varchar(8000),--存放字段名称
@insert_str varchar(8000),--存放处理结果串
@bl varchar(8000),--存放变量及其数据类型
@bl2 varchar(8000),--存放变量名称
@bl3 varchar(8000),--数据类型
@bd varchar(1000),--引号使用开始
@bd2 varchar(1000),--引号使用结束
@sum_str varchar(8000),--存放赋值变量和字段
@sum_str_column varchar(8000),--存放要提取的变量字段
@j int,--字段个数
@i int--循环起始量
set @str=''
set @bl='declare '--声明变量(保留中间的空格)
set @bl2=''
set @bl3=''
set @i=1
set @sum_str=''
set @sum_str_column=''
set @bd='''''''+'
set @bd2='+'''''''
--字段个数
select @j=count(a.[name]) from syscolumns A inner join sysobjects B
on A.id = B.id and b.name = @tb_name
--自动定义变量放入串@bl中(case when c.[name] in('char','nchar','varchar','nvarchar') then '('+convert(varchar(500),a.length)+')' else '' end)
select @bl=@bl+'@'+a.[name]+' '+'varchar(8000)'+',' ,@bl3=@bl3+c.[name]+',' from syscolumns A inner join sysobjects B on A.id = B.id
inner join systypes c
on A.xtype=C.xusertype
and b.name = @tb_name
set @bl=left(@bl,len(@bl)-1)
--要查询的表字段名放入串@str中
select @str=@str+a.[name]+',' ,@bl2=@bl2+'@'+a.[name] from syscolumns A inner join sysobjects B
on A.id = B.id and b.name = @tb_name
set @str=left(@str,len(@str)-1)
set @bl2=@bl2+'@'
while @i<=@j
begin
set @sum_str_column=@sum_str_column+@bd+isnull(left(@bl2,charindex('@',right(@bl2,len(@bl2)-1))),0)+@bd2+','
set @sum_str=@sum_str+left(@bl2,charindex('@',right(@bl2,len(@bl2)-1)))+'='+left(right(@bl2,len(@bl2)-1),charindex('@',right(@bl2,len(@bl2)-1))-1)+','
set @bl2 = right(@bl2,len(@bl2)-charindex('@',right(@bl2,len(@bl2)-1)))
set @bl3=right(@bl3,len(@bl3)-charindex(',',@bl3))
set @i=@i+1
end
set @sum_str=left(@sum_str,len(@sum_str)-1)
set @sum_str_column=left(@sum_str_column,len(@sum_str_column)-1)
--执行处理过程,在临时表中进行
set @insert_str=' '+@bl+'
declare @max int,@min int
select identity(int,1,1) my_id,'+@str+' into #tmp from '+@tb_name+'
select @min=min(my_id),@max=max(my_id) from #tmp
while @min<=@max
begin
select '+@sum_str+' from #tmp where my_id=@min
insert into out_data(flag,tb_name,insert_info)
select @min [id],'''+@tb_name+''' tb_name,''insert into '+@tb_name+''+'('+@str+') values('+@sum_str_column+')'' names
set @min=@min+1
end'
exec(@insert_str)
--print @insert_str
‘贰’ 如何导出 sql server2005数据库中的所有表数据
如果想要inesrt这样的格式的SQL语句,只能通过一些第三方的软件,如Database4.exe,这个是免费的,自己可以直接下载使用。
‘叁’ 关于为什么SQL2005导出数据表脚本时,会丢失非主键索引
导出数据表脚本时是有选项控制需要导出哪些与表有关的项目的,默认设置中未包括导出索引。从SQL Server Management Studio的菜单Tools -> Options... 打开选项设置窗口,找到如下图的选项,将值由False改成True,再导出数据表脚本时就会有创建索引的脚本了。
‘肆’ SQL2005的数据库能不能导出成sql2000的数据库!如能怎么操作
一、SQL2005不能直接导成SQL2000的数据库,因为SQL的规则是,只能升级,不能降级。你可以将SQL2000备份出的数据在SQL2005中还原,反之则不能。很多软件都是这样的,这叫向下兼容。
二、一般来说,SQL2008完全兼容于SQL2000,所以,如果是实际数据服务器架设的话,在当前,建议使用SQL2008R2,这是一个相对比较成熟与稳定的SQL SERVER版本。
三、如果是个人学习,为了节约个人电脑资源,可能会考虑降级,降级也不是做不到,只是非常非常的麻烦,以下是SQL2008中的做法供参考,SQL2005表面上的操作几乎与SQL2008完全一样:
1. 生成for 2000版本的数据库脚本
2008 的manger studio
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例
-- 右键要转到2000的库
-- 任务
-- 生成脚本
-- 在"脚本向导"的"选择数据库"中, 确定选择的是要转到2000的库
-- 勾选"为所选数据库中的所有对象编写脚本"
-- 在接下来的"选择脚本选项"中, 将”编写创建数据库的脚本”设为True,找到"为服务器版本编写脚本"项, 选择"SQL Server 2000"
-- 其他选项根据需要设置
-- 最后把脚本保存到一个 .sql 脚本文件
2. 在2000中创建目标数据库
在查询分析器(或2008的manger studio在打开脚本文件), 连接到SQL Server 2000,执行上面生成的脚本.以创建一个新的数据库
四、注意,一般上面这种做法只适合于没有多少数据的数据库,如果是一个记录上万,几十上百万的,以这种方法操作,会很难,很容易出问题。
‘伍’ sqlserver2005 中的表怎么生成带数据的脚本
因为数据库附加到2005的时候, 数据库文件已经自动升级到2005, 所以在2000下是无法再附加的(没有向上兼容的)直接restore或附加是不行的, 用脚本+导数据肯定没有问题。
2005转到2000的步骤步骤
1. 生成for 2000版本的数据库脚本
2005 的manger studio
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例
-- 右键要转到2000的库
-- 任务
-- 生成脚本
-- 在"脚本向导"的"选择数据库"中, 确定选择的是要转到2000的库
-- 勾选"为所选数据库中的所有对象编写脚本"
-- 在接下来的"选择脚本选项"中, 找到"为服务器版本编写脚本"项, 选择"SQL Server 2000"
-- 其他选项根据需要设置
-- 最后把脚本保存到一个 .sql 脚本文件
2. 在2000中创建目标数据库
在查询分析器(或2005的manger studio在打开脚本文件), 连接到SQL Server 2000,执行上面生成的脚本.以创建一个新的数据库
3. 将数据从2005导到2000
2005 的manger studio
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例
-- 右键要转到2000的库
-- 任务
-- 导出数据
-- 在"SQL Server 导入和导出向导"的"选择数据源"步骤中, 确定选择的是要导出的数 据库
-- 在"选择目标"步骤中, 连接到 2000, 并选择步骤2新建的库
-- 在"选择源表和源视图"中, 选择所有的表
-- 最后完成
‘陆’ SQL Server 2005导出表中数据的SQL脚本形式(即INSERT语句)
假设有个Excel表中的数据要插入到SQL 表tablename,有两列,第一列uid ,int型,第二列 username, nvarchar(100)型
步骤:
1. 在 Excel 中用公式生成insert语句,假设数据在A和B列, 在C列输入如下公式
="insert into tablename(uid,username) values(" & a2 & ",N'" & b2 &"')"
往下拉,使得每行都生成一条insert语句
2. 复制这些insert 语句到 SSMS中,执行即可。
‘柒’ 如何把sql2005数据库里面的表里面的数据导成脚本
一般很少这么做的。如果要转移数据的话,会用导入导出功能。或者通过excel中转。需要生成脚本的话,右击该表就可以。如果你非要把数据做成这样子,建议通过程序输出,这样方便点!
‘捌’ SQL2005如何导出表里面的数据到脚本,看清楚不是sql2008。我怎么导也只有表结构
05的ssms没有这功能,好像是08R2才有导出数据的功能吧
你可以单独下载一个08R2的ssms,或者找找第三方工具