SQL Server根据表或视图批量生成插入语句并BCP导出成文本
来源:互联网 发布:白鲨淘宝店 编辑:程序博客网 时间:2024/05/04 13:35
--声明变量 DECLARE @TableName VARCHAR(100),@RunStr VARCHAR(MAX),@RunRC VARCHAR(MAX),@FinalRun VARCHAR(MAX) --在master库创建数据载体,也可以建立在其他数据库,但一定要是实体表,因为BCP导出不支持临时表 IF OBJECT_ID('master.dbo.tempinsertstr') IS NOT NULL DROP TABLE master.dbo.tempinsertstr CREATE TABLE master.dbo.tempinsertstr(rowid INT IDENTITY(0,1),rowtext VARCHAR(MAX)) INSERT master.dbo.tempinsertstr(rowtext) VALUES('reserved') --表或视图名称定义: SELECT @TableName='Reseller' --拼凑表或视图字段信息,针对字符或时间类型的加单引号'',为防止特殊字段名都加了[] SELECT @RunStr=ISNULL(@RunStr+'+'',''+','')+'ISNULL('+CASE WHEN T.name IN('nvarchar','varchar','char','text','datetime','date','datetime2') THEN '''''''''+LTRIM('+CASE WHEN T.name='text' THEN 'CAST(['+c.name+'] as varchar(max)))+'''''''',''NULL'')' ELSE '['+c.name+'])+'''''''',''NULL'')' END ELSE 'LTRIM(['+c.name+']),''NULL'')' END FROM dbo.syscolumns C INNER JOIN dbo.systypes T on C.xusertype=T.xusertype WHERE C.id = object_id(@TableName) AND (OBJECTPROPERTY(C.id, N'IsUserTable') = 1 OR OBJECTPROPERTY(C.id,N'IsView')=1) ORDER BY C.colorder --生成批量values语句: SET @RunRC=LOWER(' insert master.dbo.tempinsertstr(rowtext) select '+'''(''+'+@RunStr+'+''),'''+' from '+@TableName) --生成单条插入语句: --SET @RunStr=LOWER(' --select '+'''insert into '+@TableName+' values(''+'+@RunStr+'+'');'''+' from '+@TableName) --EXEC master.dbo.PrintLongText @RunStr --EXEC master.dbo.PrintLongText @RunRC EXEC(@RunRC) --最后一段去除分号;信息 UPDATE master.dbo.tempinsertstr SET rowtext=STUFF(rowtext,LEN(rowtext),1,';') WHERE rowid=(SELECT MAX(rowid) FROM master.dbo.tempinsertstr) --首行rowtext为reserved更新为insert into ... values语句: UPDATE master.dbo.tempinsertstr SET rowtext='insert into '+LOWER(@TableName)+' values' WHERE rowid=0 --执行BCP导出为txt文本命令 SELECT @FinalRun=' EXEC master..xp_cmdshell ''BCP "select rowtext from master.dbo.tempinsertstr" queryout E:\txt_test\'+@TableName+'.sql -c -t "," -T -C'' ' EXEC(@FinalRun) DROP TABLE master.dbo.tempinsertstr; --以上代码编译成函数,可以多加一个打印sql的参数,便于调试 --参数1:表名或视图名 参数2:BCP导出txt文本所要输出路径 参数3:默认0为直接执行,1只打印要执行的sql,不执行代码 --EXEC usp_TableBatchInsert 'tablename','E:\txt_test\',1 --附上超长文本打印存储过程: CREATE PROC [dbo].[PrintLongText](@SQL VARCHAR(MAX)) AS DECLARE @PrintText VARCHAR(8000) = '' WHILE LEN(@SQL) > 4000 BEGIN --修正末尾是空格出现的bug SELECT @PrintText = LEFT(@SQL, 4000) + '|' SELECT @PrintText = LEFT(@PrintText, LEN(@PrintText) - CHARINDEX(CHAR(10), REVERSE(@PrintText))) SELECT @SQL = RIGHT(@SQL, LEN(@SQL) - LEN(@PrintText)) SELECT @PrintText=LEFT(@PrintText,LEN(@PrintText)-2) WHERE RIGHT(@PrintText,2) IN (CHAR(13)+CHAR(10), CHAR(10)+CHAR(13)) SELECT @PrintText=LEFT(@PrintText,LEN(@PrintText)-1) WHERE RIGHT(@PrintText,1) IN (CHAR(13),CHAR(10)) --SELECT @PrintText=RIGHT(@PrintText,LEN(@PrintText)-1) WHERE LEFT(@PrintText,1) IN (CHAR(13),CHAR(10)) PRINT @PrintText --PRINT '/*** len=' + cast(len(@PrintText) as varchar) + ' datalength=' + cast(datalength(@PrintText) as varchar) + '***/' END SELECT @PrintText=@SQL SELECT @PrintText=LEFT(@PrintText,LEN(@PrintText)-2) WHERE RIGHT(@PrintText,2) IN (CHAR(13)+CHAR(10), CHAR(10)+CHAR(13)) SELECT @PrintText=LEFT(@PrintText,LEN(@PrintText)-1) WHERE RIGHT(@PrintText,1) IN (CHAR(13),CHAR(10)) SELECT @PrintText=RIGHT(@PrintText,LEN(@PrintText)-1) WHERE LEFT(@PrintText,1) IN (CHAR(13),CHAR(10)) PRINT @PrintText
阅读全文
1 0
- SQL Server根据表或视图批量生成插入语句并BCP导出成文本
- sql server中表数据生成批量insert into 插入语句
- 批量生成sql语句批量插入数据库
- sql server 小数据插入,根据表名生成insert 语句,求加固
- SQL SERVER数据库中的表备份成文本
- SQL Server 根据视图名称批量删除视图
- Sqlserver根据表名生成insert 插入语句的sql
- 处理数据批量生成sql插入语句
- SQL Server利用bcp命令把SQL语句结果生成文本文件(动态生成文件名)
- bcp+sql语句抽取数据导出
- sql server中三种导入导出数据方式(SQL语句、bcp、dts)
- SQL Server 使用BCP导出数据
- sql server 的 bcp 导入导出
- sql server的BCP导入导出
- sql server的BCP导入导出
- SQL Server使用bcp导入导出
- sql server 使用bcp 导入导出数据
- sql server数据库导入导出bcp方法
- ssm框架搭建
- 类初始化相关
- 实验 4.2.4 实现文件复制 1. 用文件流的 I/O 函数实现一个文件拷贝程序,将一个文件拷贝到另一个文件。 2. 分别用字节读,行读,任意大小读的方式。
- C primer plus(编程练习)file-3.11-8
- java三大集合框架(面试知识储备精华篇)
- SQL Server根据表或视图批量生成插入语句并BCP导出成文本
- 数组之一维数组的定义与使用
- 实验 4.3.4 获取 CPU 的当前信息 1.用sscanf函数获取 CPU 当前信息,输出到屏幕上
- STC89C52MCU --内部EEPROM的应用和内部扩展RAM的应用
- ubuntu配置pytorch
- HTML入门之------01-hello
- 2017-7-13 diff,patch,sed,tr和网络ip转换二进制
- MFC编程--str.Format函数
- ifrog 1044