使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)

原文:使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)

1、查询待导出表Ad中的数据。

SELECT  * FROM [DB_Temp].[dbo].[Ad]

2、编写存储过程。

 1 --将表数据生成SQL脚本的存储过程
 2
 3 CREATE PROCEDURE dbo.UspOutputData
 4 @tablename sysname
 5 AS
 6 declare @column varchar(1000)
 7 declare @columndata varchar(1000)
 8 declare @sql varchar(4000)
 9 declare @xtype tinyint
10 declare @name sysname
11 declare @objectId int
12 declare @objectname sysname
13 declare @ident int
14
15 set nocount on
16 set @objectId=object_id(@tablename)
17
18 if @objectId is null -- 判断对象是否存在
19 begin
20 print 'The object not exists'
21 return
22 end
23 set @objectname=rtrim(object_name(@objectId))
24
25 if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
26 begin
27 print 'object not in current database'
28 return
29 end
30
31 if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是table
32 begin
33 print 'The object is not table'
34 return
35 end
36
37 select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80
38
39 if @ident is not null
40 print 'SET IDENTITY_INSERT '+@TableName+' ON'
41
42 declare syscolumns_cursor cursor
43
44 for select c.name,c.xtype from syscolumns c where c.id=@objectid order by c.colid
45
46 open syscolumns_cursor
47 set @column=''
48 set @columndata=''
49 fetch next from syscolumns_cursor into @name,@xtype
50
51 while @@fetch_status < >-1
52 begin
53 if @@fetch_status < >-2
54 begin
55 if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理
56
57 begin
58 set @column=@column+case when len(@column)=0 then'' else ','end+@name
59
60 set @columndata=@columndata+case when len(@columndata)=0 then '' else ','','','
61 end
62
63 +case when @xtype in(167,175) then '''''''''+'+@name+'+''''''''' --varchar,char
64 when @xtype in(231,239) then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar
65 when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime
66 when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime
67 when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier
68 else @name end
69
70 end
71
72 end
73
74 fetch next from syscolumns_cursor into @name,@xtype
75
76 end
77
78 close syscolumns_cursor
79 deallocate syscolumns_cursor
80
81 set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename
82
83 print '--'+@sql
84 exec(@sql)
85
86 if @ident is not null
87 print 'SET IDENTITY_INSERT '+@TableName+' OFF'
88
89 GO
90
91 exec UspOutputData 你的表名

View Code

2、执行存储过程

复制第一行数据:

insert Ad(Id,ParentId,Sorts,Name,Width,Height,Url,Pic,Description,Contents,Time) values(
    2,1,0,N'广告1',0,0,N'www.baidu.com',N'../../Upload/Download/20150327111437.jpg',N'广告1的内容',N'','2015-03-27 11:14:40.000')

Look!We got it!

存储过程摘自:http://bbs.csdn.net/topics/300135193

 

时间: 2024-10-23 10:36:50

使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)的相关文章

使用sql语句创建和删除约束示例代码

使用sql语句创建和删除约束 约束类型 主键约束(Primary Key constraint) --:要求主键列数据唯一,并且不允许为空. 唯一约束(Unique constraint) --:要求该列唯一,允许为空,但只能出现一个空值. 检查约束(Check constraint) --:某列取值范围限制,格式限制等,如有关年龄.邮箱(必须有@)的约束. 默认约束(Default constraint) --:某列的默认值,如在数据库里有一项数据很多重复,可以设为默认值. 外键约束(Fore

使用sql语句创建和删除约束示例代码_MsSql

使用sql语句创建和删除约束 约束类型 主键约束(Primary Key constraint) --:要求主键列数据唯一,并且不允许为空. 唯一约束(Unique constraint) --:要求该列唯一,允许为空,但只能出现一个空值. 检查约束(Check constraint) --:某列取值范围限制,格式限制等,如有关年龄.邮箱(必须有@)的约束. 默认约束(Default constraint) --:某列的默认值,如在数据库里有一项数据很多重复,可以设为默认值. 外键约束(Fore

sql语句-SQL语句创建的表不在新建的数据库中而在系统数据库中,

问题描述 SQL语句创建的表不在新建的数据库中而在系统数据库中, SQL语句创建的表不在新建的数据库中而在系统数据库中, 怎么让表在新建的数据库呢 解决方案 肯定你写错了,或者数据库连接到了系统库,或者sql中指明了写到系统库了 解决方案二: 你没写 use database; database是你的数据库 解决方案三: 创建表前,先写需要创建在哪个数据库中.USE DATABASE GO......CREATE TABLENAME() 解决方案四: 先要使用自己的数据库 use databas

代码-sql代理作业 可以用sql语句创建吗

问题描述 sql代理作业 可以用sql语句创建吗 我想在页面一打开的时候就创建一个sql代理作业,然后只执行一次,代码可以做到吗? 解决方案 参见,http://www.reader8.cn/jiaocheng/20130306/1945490.html

sql语句问题-sql查询问题求大神解答

问题描述 sql查询问题求大神解答 sql语句能不能判断某个字段的值是否包含多个值? 比如这样:有一张表,表中有个name字段,这个字段的值有的包含多个用逗号分开名字,形如 :aaa,bbb,ccc.怎么样写一条sql语句查出来name字段有多个值的数据? 解决方案 首先建议重新设计表. 这已经违反第一范式了. 并且这样的查询不能使用索引效率会很低. 如果非要做的话目前的Mysql的版本里没有类似于Split的函数,只能自己创建函数了. 这里贴个连接:http://greemranqq.itey

SQL语句实现SQL Server 2000及Sql Server 2005日志收缩(批量)_MsSql

复制代码 代码如下: DECLARE @name VARCHAR(25) DECLARE @SQL VARCHAR(1000) DECLARE @logid INT DECLARE sysdatabase_name CURSOR FOR SELECT name FROM master.dbo.sysdatabases OPEN sysdatabase_name FETCH NEXT FROM sysdatabase_name INTO @name WHILE @@FETCH_STATUS = 0

SQL语句实现SQL Server 2000及Sql Server 2005日志收缩(批量)

复制代码 代码如下:DECLARE @name VARCHAR(25) DECLARE @SQL VARCHAR(1000) DECLARE @logid INT DECLARE sysdatabase_name CURSOR FOR SELECT name FROM master.dbo.sysdatabases OPEN sysdatabase_name FETCH NEXT FROM sysdatabase_name INTO @name WHILE @@FETCH_STATUS = 0

oracle sql语句 求sql语句

问题描述 oracle sql语句 求sql语句 数据源: 图片自动说明: 日期,投诉次数,分公司ID,分公司,投诉类别 环比:取查询日期的前一天,如:20150720,环比20150719 结果: 每万用户投诉比 每万用户投诉比环比增幅 个人投诉总次数 个人投诉环比增幅 集团投诉总次数 集团投诉环比增幅 解决方案 oracle sql语句优化Oracle用SQL语句分页 解决方案二: 分公司总用户数都没有,哪里来的每万用户投诉比? 解决方案三: 用decode吧,参考这个sql select

c# 水晶报表 dataset中使用SQL语句创建了 tableadapter 但是没有数据没有传递到表里面

问题描述 先是在数据源里面创建了一个空的DataSet然后用SQL语句在数据集里面创建了tableadapter在tableadapter预览了一下数据也是可以看到的,但是在水晶报表数据库专家添加了之前创建的数据集之后在里面没有查看到数据把字段拉进去水晶报表里面之后显示的东西也只是自带的测试数据不是我要的数据 解决方案 解决方案二:初步觉得应该是Fill即获取数据后填充的时候没有填充好,但是我用的是它自动生成的代码...