1. 程式人生 > >Sqlserver表資料轉換SQL指令碼儲存過程

Sqlserver表資料轉換SQL指令碼儲存過程

使用SQL Server 2000自帶的“生成SQL指令碼”工具,可以生成建立表、檢視、儲存過程等的SQL指令碼。那麼,能否將表中的資料也生成為SQL指令碼,在查詢分析器中執行這些指令碼後自動將資料匯入到SQL Server中呢?答案是肯定的。

下面的儲存過程是一位高人寫的,這位高人的姓氏已無人知曉,但SQL Server社群中偶爾還可看到此不朽之作。

CREATE PROCEDURE   dbo.OutputData    
  @tablename   sysname     
  AS     
  declare   @column   varchar(1000)    
  declare   @columndata   varchar(1000)    
  declare   @sql   varchar(4000)    
  declare   @xtype   tinyint     
  declare   @name   sysname     
  declare   @objectId   int     
  declare   @objectname   sysname     
  declare   @ident   int     

  set   nocount   on     
  set   @objectId=object_id(@tablename)    
  if  @objectId   is   null   --   判斷物件是否存在    
     begin     
      print  @tablename +  '物件不存在'    
      return     
    end    

  set @objectname=rtrim(object_name(@objectId))    
  if @objectname is null or charindex(@objectname,@tablename)=0
    begin     
      print  @tablename +  '物件不在當前資料庫中'     
      return     
    end        

  if  OBJECTPROPERTY(@objectId,'IsTable')   <   >   1   --   判斷物件是否是表    
    begin     
      print  @tablename +  '物件不是表'    
      return     
    end        

  select   @ident=status&0x80   from   syscolumns   where   [email protected]   and   status&0x80=0x80         

  if @ident is   not   null     
    print   'SET   IDENTITY_INSERT   '+ @TableName + '   ON'    


  --定義遊標,迴圈取資料並生成Insert語句
  declare  syscolumns_cursor  cursor for  
    select   c.name,c.xtype   from   syscolumns   c    
      where   [email protected]    
      order   by   c.colid    

  --開啟遊標
  open   syscolumns_cursor    
  set  @column=''    
  set  @columndata=''    
  fetch   next   from   syscolumns_cursor   into   @name,@xtype    
  while   @@fetch_status   <> -1    
    begin     
    if   @@fetch_status   <> -2    
      begin     
      if   @xtype   not   in(189,34,35,99,98)   --timestamp不需處理,image,text,ntext,sql_variant 暫時不處理    
        begin     
        set   @[email protected] +
          case   when   len(@column)=0   then '' 
                 else   ','
                 end + @name    
        set   @columndata = @columndata +
          case   when   len(@columndata)=0   then   ''  
                 else   ','','','
                 end  +
          case   when  @xtype   in(167,175)  then   '''''''''+'[email protected]+'+'''''''''                --varchar,char    
                 when   @xtype   in(231,239)   then   '''N''''''+'[email protected]+'+'''''''''             --nvarchar,nchar    
                 when   @xtype=61   then   '''''''''+convert(char(23),'[email protected]+',121)+'''''''''   --datetime    
                 when   @xtype=58   then   '''''''''+convert(char(16),'[email protected]+',120)+'''''''''   --smalldatetime    
                  when   @xtype=36   then   '''''''''+convert(char(36),'[email protected]+')+'''''''''       --uniqueidentifier    
                 else   @name  
                 end     
        end     
      end     
    fetch   next   from   syscolumns_cursor   into   @name,@xtype    
    end     
  close   syscolumns_cursor    
  deallocate   syscolumns_cursor         

  set  @sql='set   nocount   on   select   ''insert   '[email protected]+'('[email protected]+')   values(''as   ''--'','[email protected]+','')''   from   '[email protected]        

  print   '--'[email protected]    
  exec(@sql)         

  if   @ident   is   not   null     
  print  'SET   IDENTITY_INSERT   '[email protected]+'   OFF'    

呼叫時 exec   OutputData   'myuser' 其中myUser中當前資料庫中存在的表

相關推薦

Sqlserver資料轉換SQL指令碼儲存過程

使用SQL Server 2000自帶的“生成SQL指令碼”工具,可以生成建立表、檢視、儲存過程等的SQL指令碼。那麼,能否將表中的資料也生成為SQL指令碼,在查詢分析器中執行這些指令碼後自動將資料匯入到SQL Server中呢?答案是肯定的。 下面的儲存過程是一位高人寫的,

Sql資料庫儲存過程傳值(傳遞資料名,列名),sp_executesql函式的使用

遇到的專案需求是:對幾個不同的資料表和相應的欄位進行類似的操作,表的名稱和相關的列名可以作為儲存過程的引數傳遞,這樣可以使用遊標遍歷不同表格的不同的列,再使用相同函式求出返回值進行統一的處理。由於專案中表的資料龐大,關係複雜,此處做簡化處理,描述大致意思。(此處的資料庫是SQ

SQL SERVER儲存過程批量插入資料庫資料

CREATEPROCEDURE add_UserInfoASDECLARE@userCodeVARCHAR(30)DECLARE@userNameVARCHAR(30)DECLARE@userCode_baseVARCHAR(30)DECLARE@countINTEGERDECLARE@indexINTEGE

Sql Server儲存過程從一個中抓取資料填充到另一張

  set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author:  <alex,,Name> -- Create

SQL SERVER匯出資料sql指令碼形式

CREATE proc spGenInsertSQL (@tablename varchar(256)) as begin declare @sql varchar(8000) declare @sqlValues varchar(8000) set @sql =' (' set @sqlVal

mybaits(查詢與別名、日誌框架顯示sql語句、物件屬性和資料庫表字段不匹配resultMap使用、mysql資料查詢分頁、執行sql儲存過程、動態SQL語句)

主要是各種配置檔案,建議把整個專案搬到自己電腦上慢慢看。 建立maven專案 首先是各種配置檔案: pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

在 Oracle sql developer匯入樣例資料上 執行指令碼

oracle登陸時的系統/ SYS使用者的密碼忘了怎麼辦在伺服器本地登入,不用打密碼sqlplus / as sysdba 登入之後再改密碼alter user sys identified by or

[轉]SqlServerSql檢視儲存過程

SqlServer中Sql檢視儲存過程 ( 一)利用Sql語句查詢資料庫中的所有表 1.利用sysobjects系統表 select * from sysobjects where xtype='U'  2,利用sys.tables目錄檢視   sys.t

sql server 儲存過程傳遞名引數及Dynamic SQL

ALTER PROCEDURE [dbo].[sp_tablenametest] @table_name varchar(50), @PMId int, @ValueEq int AS BEGIN SET NOCOUNT ON; DECLARE @cmd AS NVARC

SqlServer支援多關聯的分頁儲存過程

具體程式碼如下所示: CREATE PROCEDURE p_GetPager @TotalCount INT OUTPUT, --總記錄數 @TotalPage INT OUTPUT, --總頁數 @Table NVARCHAR(1

sql】-儲存過程實現迴圈遍歷一列資料

前言      專案中要實現前端頁面動態配置行為,每個行為呼叫不同的儲存過程的功能,於是乎小編一頭扎進了儲存過程的海洋中,愈發覺得之前寫的儲存過程算是基礎了。遇到一個問題:查詢到表中一列資料,需要取出每一行資料來執行下一個儲存過程。這可怎麼鬧?別急,小編來給

SqlServer儲存過程轉換成Oracle儲存過程語法常見問題

1. top order by 轉換成 rownum order by 的問題 (子查詢實現) 同級情況下的優先處理順序: sqlserver: 先order by 再top orac

SQL資料庫 儲存過程、索引、檢視與臨時

--資料庫程式設計2. --儲存過程  exec  --執行速度快:儲存過程是編譯之後的語句,儲存在資料庫的內容;儲存過程的操作只有一次。--系統儲存過程 存放在master資料庫中,都以“sp_”或“xp_”開頭 exec sp_databasesexec sp_r

SQL遠端連線資料庫查詢資料,遠端呼叫儲存過程

以下為SQL2008環境下呼叫遠端資料庫上的儲存過程 --執行遠端儲存過程.查詢遠端資料庫 --遠端連線 if ( not exists(select * from sys.servers where name='TESTSERVER'))

sqlserver 各種判斷是否存在(名、函式、儲存過程等)

庫是否存在 if exists(select * from master..sysdatabases where name=N'庫名') print 'exists'elseprint 'not exists'--------------- -- 判斷要建立的表名是否存在 if exists (select

T-SQL刪除儲存過程

使用T-SQL指令碼刪除儲存過程 語法: --宣告資料庫引用use 資料庫名稱;go --判斷是否存在儲存過程,如果存在則刪除if exists(select * from sys.procedures where name=儲存過程名稱)drop { proc | procedure } [架構名][

SQL server 儲存過程的編寫

USE [資料庫名稱] GO /****** Object:  StoredProcedure [dbo].[insertbGait]    Script Date: 2018/7/17 15:51:22 ******/ SET ANSI_NULLS ON GO

mysql名作為引數傳入儲存過程

有以下儲存過程: CREATE DEFINER=`root`@`localhost` PROCEDURE `P_HoverTreePages`( IN `TableName` VARCHAR(200), IN `FieldList` VARCHAR(2000) , IN `Pr

SQL SERVER儲存過程加密和安全上下文

對SQL Server 2008的安全入門略作小結,以作備忘。本文涉及兩個應用:儲存過程加密和安全上下文。 <一>儲存過程加密 SQL server,我已經成了儲存過程的忠實擁躉。在直接使用SQL語句還是儲存過程來處理業務邏輯時,我基本會毫不猶豫地選擇後者。 理由如下:

SQL Server 儲存過程返回值的幾種方式

獲得儲存過程的返回值–通過查詢分析器獲得 (1)不帶任何引數的儲存過程(儲存過程語句中含有return) —建立儲存過程 CREATE PROCEDURE testReturn AS return 145 GO —執行儲存過程 DECLARE @RC int exec @RC=