1. 程式人生 > >SQLServer儲存過程之篩選、更新、分組簡記

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儲存過程whilerepeat迴圈

一、while迴圈 CREATE DEFINER=`root`@`localhost` PROCEDURE `PRO_WHILE`() BEGIN DECLARE i INT DEFAULT 0; WHILE (i<10) DO /*當滿足條件的時候執行此程式碼塊*/ BE

mysql中的儲存過程無引數,inoutinout引數的講解

首先建立三個測試表: 如下: user表裡邊的欄位為userId,userName 使用者表 dept表裡邊的欄位為deptId,deptName部門表 other表裡邊的欄位為otherId,otherName 其他表 建立無引數儲存 create procedure 你

儲存過程無引數,inoutinout引數的講解

首先建立三個測試表: 如下: 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

儲存過程中的關鍵字--ASGO的含義

    在個人學習編寫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