1. 程式人生 > >SQL Server根據表或視圖批量生成插入語句並BCP導出成文本

SQL Server根據表或視圖批量生成插入語句並BCP導出成文本

lower row 創建 index .sql temp length and 空格

--聲明變量
 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 ‘+‘‘‘([email protected]
/* */+‘+‘‘),‘‘‘+‘ from [email protected]) --生成單條插入語句: --SET @RunStr=LOWER(‘ --select ‘+‘‘‘insert into [email protected]+‘ values([email protected]+‘+‘‘);‘‘‘+‘ from [email protected]) --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\[email protected]
/* */+‘.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 @[email protected]
/* */ 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

  

SQL Server根據表或視圖批量生成插入語句並BCP導出成文本

相關推薦

SQL Server根據批量生成插入語句BCP成文

lower row 創建 index .sql temp length and 空格 --聲明變量 DECLARE @TableName VARCHAR(100),@RunStr VARCHAR(MAX),@RunRC VARCHAR(MAX),@FinalRun VA

ORA-00942:不存在 低級錯誤一例

原創 huang text 用戶 *** net 存在 ati nbsp ORA-00942:表或視圖不存在 低級錯誤一例 運行查詢語句,報ORA-00942錯誤 檢查後發現沒有指定表的所屬用戶。加入用戶。再次查詢,查詢正常,截圖例如以下: *

轉://Oracle A用戶給B用戶授權查詢指定權限方案

tab dex reat del 作用 系統 所有 mit 應用 用DNINMSV31賬戶登錄數據庫進行如下操作: CREATE USER NORTHBOUND IDENTIFIED BY NORTHBOUND DEFAULT TABLESPACE "TBS_DNINMS

賦予查詢權限

http alt 技術 info bubuko 目標表 分享圖片 登錄用戶 windows 第一步:Windows身份驗證登錄 第二步:新建登錄用戶 第三步:修改新加賬號的屬性: 第四步:修改目標表視圖的權限設置 表或視圖賦予查詢權限

SQL獲取SQL Server 根據名獲取的所有列及屬性

select     c.name as [欄位名],t.name as [欄位型別]     ,convert(bit,c.IsNullable)  as [可否為空]     ,convert(bit,case when exists(select 1 from sysobjects where xty

sql server中如何修改中的數據?

結果 select http com bubuko state -- span 調用 sql server中如何修改視圖中的數據? 我做個測試,視圖的數據有標記字段時,如果是這種方式(0 as FlagState),是無法修改的 --創建視圖語句 --- crea

[Swift通天遁地]一、超級工具-(5)使用UIWebView(網頁)加載本地頁面調用JavaScript(腳)代碼

bound sources 轉換成 height 文本框 bundle 加載本地 self. oftype 本文將演示如何使用UIWebView(網頁視圖)讀取項目中的網頁文件,以及執行JavaScript腳本代碼。 在項目文件夾【DemoApp】上點擊鼠標右鍵,彈出右鍵

設置Sql server用戶對、存儲過程、架構的增刪改查權限

例如 ont 函數 權限控制 str 角色 -s 簡單 管理 根據數據庫Schema限制用戶對數據庫的操作行為 授予Shema dbo下對象的定義權限給某個用戶(也就是說該用戶可以修改架構dbo下所有表/視圖/存儲過程/函數的結構) use [Your DB N

SQL Server根據資料庫,自動生成insert語句批量新增

實際工作中,兩個資料庫不在同一臺伺服器上,又需要複製資料庫表時,可以在需要複製的資料庫中建立下面的儲存過程。 CREATE PROCEDURE [dbo].[OutputData] @tablename sysname, @

刪除所有約束、SQL

drop sql腳本 alt pen 過程 sel 同義詞 uniq true --刪除所有約束、表、視圖等SQL腳本 --############################################### --刪除所有外鍵約束 --#########

SQL Server 根據樹狀結構生成以/號分割的路由字串

很多情況下,我們有必要把樹形結構進行資料梳理。比如,要方便的過濾出一個父節點下的所有子節點等等。。。 這個時候,我們可以生成一個路徑表字符串,在應用時只需要對該字串進行索引即可達成目的。 目標:按圖示的部門結構樹,獲取本身的完整路徑字串。比如,前道工序部門,其部門程式碼為PDTE,上級部門為PD生產部,按

sqlserver、索引(創建、修改、刪除)相關示例

sqlserver表、視圖、索引一、表相關1、創建USE [test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Ceshi]( [id] [int] NOT NULL, [name] [varch

SQL SERVER 修改

sql server 改表名exec sp_rename ‘table1‘, ‘table2‘本文出自 “白楊” 博客,請務必保留此出處http://dabaiyang.blog.51cto.com/3537462/1941556SQL SERVER 修改表名

T-SQL查詢進階--深入淺出

bsp images select語句 執行 lte 告訴 企業 contact 需要 簡介 視圖可以看作定義在SQL Server上的虛擬表.視圖正如其名字的含義一樣,是另一種查看數據的入口.常規視圖本身並不存儲實際的數據,而僅僅存儲一個Select語句和所

oracle DBA 常用

segment rec dict 用戶 系統權限 nbsp tempfile thread sql ☆dba_開頭..... dba_users 數據庫用戶信息 dba_segments 表段信息 dba_extents 數據區信息 dba

Sql Server及字段添加註釋

base dex es2017 pex 添加 @value logs table images 一、table 1、添加表註釋 EXECUTE sys.sp_addextendedproperty @name = N‘MS_Description‘, -- sy

Spring Data JPA 多個實體類聯合查詢

test where part 左連接 lec 視圖 view new manytoone Spring Data JPA 查詢數據庫時,如果兩個表有關聯,那麽就設個外鍵,在查詢的時候用Specification創建Join 查詢便可。但是只支持左連接,不支持右連接,雖說左

sql server 根據身份證號計算出生日期和年齡的存儲過程

ttl 實現 分享 mst () 需要 poc getdate mtr 我這邊有一個業務,需要客戶填寫身份證號,自動計算他的出生日期和年齡 在sql中,具體的存儲過程實現是這樣的: /********************************************

SQL課堂筆記--索引和

比較 成績表 存儲 _id 復合索引 res 子句 unique 列名 2017.11.16 5.11 .認識索引 1.索引的概念: -(1)加快數據檢索速度 -(2)加快表與表之間的連接速度 -(3)在使用order by 和 group by

SAP應用創新-維護控制統一路徑

存在 tro 一點 bsp 例如 測試 數據 問題: 訂單 SAP應用創新-維護控制表、視圖統一路徑 背景: Sap 裏面通過技術支持人員維護表的值控制業務操作的表不少,一般通過事物代碼或記錄在系統外的文檔或在某個程序上放置一個按鈕。缺點:分散,不易記,不好找,人員更