SQLServer儲存過程之篩選、更新、分組簡記
在SQLserver中,一般寫一些儲存過程能提高資料庫操作效率。簡單記錄幾個儲存過程,以備查詢。
一、利用一個欄位進行分組求平均值、最大值、最小值;
USE [Mengtougou]
GO
/****** Object: StoredProcedure [dbo].[extracter_Site_651031] Script Date: 05/15/2015 09:48:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date: 2015-03
-- Description: <Description,,>
/*
程式碼編寫:
--呼叫示例--
extracter_Site_651031 @month=7,@day=11
*/
-- =============================================
PROCEDURE [dbo].[extracter_Site_651031]
-- Add the parameters for the stored procedure here
@month nvarchar(20), -- 輸入月份
@day nvarchar(20)-- 輸入日份
AS
DECLARE @str nvarchar(300)
DECLARE @str1 nvarchar(300)
DECLARE @str2 nvarchar(300)
DECLARE @filename nvarchar(30)
BEGIN
----------------------------------Site_651031---------------------------------------------------
select Site_651031.站號,
AVG(MTG_2012clear.氣溫)as t_avg,
max(MTG_2012clear.氣溫)as t_max,
min(MTG_2012clear.氣溫)as t_min
into temp
from Site_651031 left join MTG_2012clear
on Site_651031.站號=MTG_2012clear.站號
where MTG_2012clear.月 [email protected] and MTG_2012clear.日[email protected]
GROUP BY Site_651031.站號;END
set @str1='update Site_651031 set Site_651031.平均值=null, Site_651031.最大值=null,
Site_651031.最小值=null from Site_651031,temp where Site_651031.站號=temp.站號'
set @str='update Site_651031 set Site_651031.平均值=temp.t_avg, Site_651031.最大值=temp.t_max,
Site_651031.最小值=temp.t_min from Site_651031,temp where Site_651031.站號=temp.站號'
set @str2='drop table temp'
set @filename='Site_651031_' [email protected]+'_'[email protected]+'_'+'.xls'
Exec(@str1)
Exec(@str)
Exec p_exporttb @tbname='Site_651031',@path='E:\MTG_TEST\',@[email protected]
Exec(@str2)
二、利用一個表的欄位作為篩選條件,在另外一個表中查詢(主要是時間序列的氣象資料,按月、日、時查詢);
PROCEDURE [dbo].[Procedure_24SQL]
-- Add the parameters for the stored procedure here 下面是處理過程的兩個引數
@month nvarchar(20), -- 輸入月份
@day nvarchar(20)-- 輸入日份
AS
DECLARE @i int
DECLARE @str nvarchar(300)
DECLARE @str1 nvarchar(300)
DECLARE @strname nvarchar(30)
DECLARE @filename nvarchar(30)
set @i=0
WHILE @i < 24
BEGIN
set @strname='MTG2012_' [email protected]+'_'[email protected]+'_'+convert(nvarchar(3),@i)
set @filename='MTG2012_'[email protected]+'_'[email protected]+'_'+convert(nvarchar(3),@i)+'.xls'
--set @str='select * into '+'MTG2012'[email protected][email protected]+'_'+convert(nvarchar(3),@i)+'
--from MTG_2012data WHERE 月='[email protected] +' and 日='[email protected]+' and 時='+convert(nvarchar(3),@i);
set @str='select MTG_2012asp.站號,MTG_2012asp.坡向,MTG_2012data.海拔,
MTG_2012data.經度,MTG_2012data.緯度,MTG_2012data.氣溫
into MTG2012_'[email protected]+'_'[email protected]+'_'+convert(nvarchar(3),@i)+
' from MTG_2012asp left join MTG_2012data on MTG_2012asp.站號=MTG_2012data.站號
WHERE 月='[email protected] +' and 日='[email protected]+' and 時='+convert(nvarchar(3),@i);
set @str1='DROP TABLE '+ @strname
Exec(@str)
Exec p_exporttb @[email protected],@path='E:\MTG_TEST\',@[email protected]
Exec(@str1)
set @[email protected]+1
end
三、一個表更新另一個表;
@str='update MTG_2012asp set 氣溫'+convert(nvarchar(3),@i)+' =MTG_2012data.氣溫
from MTG_2012asp,MTG_2012data
where MTG_2012asp.站號=MTG_2012data.站號 and 月='[email protected] +' and 日='[email protected]+' and 時='+convert(nvarchar(3),@i);
四、輸出資料庫表到excel檔案;
--資料匯出EXCEL
--匯出表中的資料到Excel,
--包含欄位名,
--檔案為真正的Excel檔案,
--如果檔案不存在,將自動建立檔案,
--如果表不存在,將自動建立表,
--基於通用性考慮,僅支援匯出標準資料型別
--鄒建 2003.10(引用請保留此資訊)--*/
--呼叫示例
--p_exporttb @tbname='地區資料',@path='c:\',@fname='aa.xls'
ALTER proc [dbo].[p_exporttb]
@tbname sysname, --要匯出的表名
@path nvarchar(1000), --檔案存放目錄
@fname nvarchar(250)='' --檔名,預設為表名
as
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)
--引數檢測
if isnull(@fname,'')='' set @[email protected]+'.xls'
--檢查檔案是否已經存在
if right(@path,1)<>'\' set @[email protected]+'\'
create table #tb(a bit,b bit,c bit)
set @[email protected][email protected]
insert into #tb exec master..xp_fileexist @sql
--資料庫建立語句
set @[email protected][email protected]
if exists(select 1 from #tb where a=1)
set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'
+';CREATE_DB="'[email protected]+'";DBQ='[email protected]
else
set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES'
+';DATABASE='[email protected]+'"'
--連線資料庫
exec @err=sp_oacreate 'adodb.connection',@obj out
if @err<>0 goto lberr
exec @err=sp_oamethod @obj,'open',null,@constr
if @err<>0 goto lberr
/*--如果覆蓋已經存在的表,就加上下面的語句
--建立之前先刪除表/如果存在的話
select @sql='drop table ['[email protected]+']'
exec @err=sp_oamethod @obj,'execute',@out out,@sql
--*/
--建立表的SQL
select @sql='',@fdlist=''
select @[email protected]+',['+a.name+']'
,@[email protected]+',['+a.name+'] '
+case
when b.name like '%char'
then case when a.length>255 then 'memo'
else 'text('+cast(a.length as varchar)+')' end
when b.name like '%int' or b.name='bit' then 'int'
when b.name like '%datetime' then 'datetime'
when b.name like '%money' then 'money'
when b.name like '%text' then 'memo'
else b.name end
FROM syscolumns a left join systypes b on a.xtype=b.xusertype
where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
and object_id(@tbname)=id
select @sql='create table ['[email protected]
+']('+substring(@sql,2,8000)+')'
,@fdlist=substring(@fdlist,2,8000)
exec @err=sp_oamethod @obj,'execute',@out out,@sql
if @err<>0 goto lberr
exec @err=sp_oadestroy @obj
--匯入資料
set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;IMEX=1
;DATABASE='[email protected][email protected]+''',['[email protected]+'$])'
exec('insert into '[email protected]+'('[email protected]+') select '[email protected]+' from '[email protected])
return
lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
lbexit:
select cast(@err as varbinary(4)) as 錯誤號
,@src as 錯誤源,@desc as 錯誤描述
select @sql,@constr,@fdlist
相關推薦
SQLServer儲存過程之篩選、更新、分組簡記
在SQLserver中,一般寫一些儲存過程能提高資料庫操作效率。簡單記錄幾個儲存過程,以備查詢。 一、利用一個欄位進行分組求平均值、最大值、最小值; USE [Mengtougou] GO /****** Object: StoredProcedure [dbo].[ex
SqlServer儲存過程、函式、遊標例子之函式(一)
--3.多宣告表值函式:可以看作標量型和內嵌表值型函式的結合體。它的返回值是一個表,但它和標量型函式一樣有一個用BEGIN-END 語句括起來的函式體,返回值的表中----的資料是由函式體中的語句插入的。由此可見,它可以進行多次查詢,對資料進行多次篩選與合併,彌補了內聯表值型函式的不足。
MySQL儲存過程之while、repeat迴圈
一、while迴圈 CREATE DEFINER=`root`@`localhost` PROCEDURE `PRO_WHILE`() BEGIN DECLARE i INT DEFAULT 0; WHILE (i<10) DO /*當滿足條件的時候執行此程式碼塊*/ BE
mysql中的儲存過程之無引數,in、out、inout引數的講解
首先建立三個測試表: 如下: user表裡邊的欄位為userId,userName 使用者表 dept表裡邊的欄位為deptId,deptName部門表 other表裡邊的欄位為otherId,otherName 其他表 建立無引數儲存 create procedure 你
儲存過程之無引數,in、out、inout引數的講解
首先建立三個測試表: 如下: user表裡邊的欄位為userId,userName 使用者表 dept表裡邊的欄位為deptId,deptName部門表 other表裡邊的欄位為otherId,otherName 其他表 建立無引數儲存 create proced
sqlserver儲存過程where條件引數為空不加入篩選
CREATE PROCEDURE "dbo"."TEST_PRC"( @no_in VARCHAR(20)
儲存過程用到的表、分組、排序、聯結
查詢儲存過程用到的表,並進行分組、排序、聯結: 1 SELECT 2 REFERENCED_OWNER, 3 REFERENCED_NAME, 4 LISTAGG(XH||'>'||NAME,',') WITHIN GROUP(ORDER BY
儲存過程中的關鍵字--AS、GO的含義
在個人學習編寫SQL Server儲存過程中,對於儲存過程中的關鍵字As、Go關鍵字不懂,在網上查看了很多資料。在這裡,我個人稍作總結一下. ========================As、Go說法一=======================
MySQL儲存過程和自定義函式、Navicat for mysql、建立儲存過程和函式、呼叫儲存過程和函式的區別
與你相遇 好幸運 可我已失去為你淚流滿面的權利 但願在我看不到的天際 你張開了雙翼 1 MySQL儲存過程和函式 過程和函式,它們被編譯後儲存在資料庫中,稱為永續性儲存模組(Persistent Stored Module,PSM),可以反覆呼叫,執行速度快。 1.1 儲存過程 儲存過程是由
SqlServer設定特定使用者操作特定表(插入、刪除、更新、查詢 的許可權設定)
目錄 一、需求場景: 二、操作步驟: 1、登入SSMS後選擇【安全性】,右鍵點選【登入名】,在彈出的右鍵選單中選擇【新建登入名】選項; 2、在【常規】選項卡中,建立登入名,並設定預設資料庫;
centos7更新、更新、每天更新、每天自動更新
ron 配置 .com crond load idt etc 狀態 con 每一天都有成千上萬的黑客在世界各地尋找 Linux 系統和常見軟件的安全漏洞,一有發現便會發動規模龐大而迅速的網絡攻擊,務求在我們來得及反應前把系統攻陷。不要以為黑客都只是十來歲的年輕小毛頭,大部分
mysql-插入、更新、刪除數據
sta row code ica update tab -- affect nbsp 1、插入: ① mysql中有三種插入:insert into、replace into、insert ignore insert into:表示插
閱讀器、更新、圖片
clas 下拉 填充 時間 row ini dir 布爾類型 .sh SqlDataReader: 一、sqlDataReder對象,可以從數據庫中檢索只讀的數據,它每次從查詢結果中讀取一行到內存。 采用sqlDataReder的Read方法行讀取數據,如果讀到記錄就返回t
使用T-SQL語句插入、更新、刪除數據表
數據庫 sql server sql語言 楊書凡 t-sql語句 在對數據進行管理時,使用SSMS進行數據維護有可視化、方便的優點,但是在批量維護或重復維護時,使用SSMS就不方便了,還容易出錯,這就需要編寫SQL語句對數據庫進行維護SQL和T-SQL SQL是Structu
MySQL數據庫基礎(六)——SQL插入、更新、刪除操作
SQLMySQL數據庫基礎(六)——SQL插入、更新、刪除操作 一、插入數據 1、為表的所有字段插入數據 使用基本的INSERT語句插入數據要求指定表名稱和插入到新記錄中的值。 INSERT INTO table_name (column_list) VALUES (value_list); insert i
Python簡介、安裝、更新、基本語法及資料型別
Python簡介 python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。 最新的TIOBE排行榜,Python趕超PHP佔據第
一步一步學MySQL----7 插入、更新、刪除資料
7.1 插入完整資料記錄 語法: insert into table_name(field1,field2,field3,……)values(value1,value2,value3,……); 例如: 我們先建立一張user表,如下: mysq
pymongo建立索引、更新、刪除
pymongo建立索引、更新、刪除 索引建立
sqlserver儲存過程/遊標及例項
--系統儲存過程exec sp_databases --檢視系統資料庫exec sp_tables --檢視系統表exec sp_rename 'aaa','bbb' --修改表明aaa為bbbexec sp_rename 'dbo.aaa','col1','col2' --修改表aaa的列col1為col2
SQLSERVER儲存過程的基本語法例項
SQLSERVER儲存過程的基本語法例項 SQLSERVER儲存過程的基本語法例項 一、定義變數--簡單賦值 declare @a intset @a=5 print @a --使用select語句賦值 declare @user1 nvarchar(50) select @user1='張三'prin