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
[轉]SqlServer中Sql檢視儲存過程
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=