1. 程式人生 > >Sql Server2008如何在儲存過程中實現根據判斷插入更新資料

Sql Server2008如何在儲存過程中實現根據判斷插入更新資料

儲存過程的功能非常強大,在某種程度上甚至可以替代業務邏輯層,接下來就一個小例子來說明,用儲存過程插入或更新語句。
1、資料庫表結構

所用資料庫為Sql Server2008。

2、建立儲存過程

(1)實現功能:

        有相同的資料,直接返回(返回值:0);
        有主鍵相同,但是資料不同的資料,進行更新處理(返回值:2);
        沒有資料,進行插入資料處理(返回值:1)。

根據不同的情況設定儲存過程的返回值,呼叫儲存過程的時候,根據不同的返回值,進行相關的處理。

(2)下面編碼只是實現的基本的功能,具體的Sql程式碼如下:

   
Create proc sp_Insert_Student
        @No char(10),
        @Name varchar(20),
        @Sex char(2),
        @Age int,
        @rtn int output
    as
    declare
        @tmpName varchar(20),
        @tmpSex char(2),
        @tmpAge int
         
        if exists(select * from Student where 
[email protected]
) begin select @tmpName=Name,@tmpSex=Sex,@tmpAge=Age from Student where [email protected] if ((@[email protected]) and (@[email protected]) and (@[email protected])) begin set @rtn=0 --有相同的資料,直接返回值 end else begin update Student set
[email protected]
,[email protected],[email protected] where [email protected] set @rtn=2 --有主鍵相同的資料,進行更新處理 end end else begin insert into Student values(@No,@Name,@Sex,@Age) set @rtn=1 --沒有相同的資料,進行插入處理 end



3、呼叫儲存過程

這裡在Sql Server環境中簡單的實現了呼叫,在程式中呼叫也很方便。

具體的程式碼如下:

    declare @rtn int
    exec sp_Insert_Student '1101','張三','男',23,@rtn output
     
    if @rtn=0
        print '已經存在相同的。'
    else if @rtn=1
        print '插入成功。'
    else
        print '更新成功' 



一個儲存過程就實現了3中情況,而且效率很高,使用靈活。 希望對大家有所幫助。

在成長學習的過程中,我會不斷髮一些自己的心得體會,和大家共享。

相關推薦

Sql Server2008如何在儲存過程實現根據判斷插入更新資料

儲存過程的功能非常強大,在某種程度上甚至可以替代業務邏輯層,接下來就一個小例子來說明,用儲存過程插入或更新語句。 1、資料庫表結構 所用資料庫為Sql Server2008。 2、建立儲存過程 (1)實現功能:         有相同的資料,直接返回(返回值:0);    

SQL Server儲存過程top後為變數時的處理

@pageRecordNum為每頁顯示的記錄數,@currentPageNum為當前的頁數 create proc pagination  @pageRecordNum int,@currentPageNum int as  declare @recNum varchar(

oracle 動態SQL儲存過程的使用

1、      靜態SQL和動態SQLOracle編譯PL/SQL程式塊分為兩個種(其它SQL程式碼塊包括儲存過程也是如此):其一為前期聯編(early binding),即SQL語句在程式編譯期間就已經確定,大多數的編譯情況屬於這種型別;另外一種是後期聯編(late bin

SQL Server 儲存過程處理多個查詢條件的幾種常見寫法分析,我們該用那種寫法

最近發現還有不少做開發的小夥伴,在寫儲存過程的時候,在參考已有的不同的寫法時,往往很迷茫, 不知道各種寫法孰優孰劣,該選用那種寫法,以及各種寫法優缺點,本文以一個簡單的查詢儲存過程為例,簡單說一下各種寫法的區別,以及該用那種寫法 專業DBA以及熟悉資料庫的同學請無視。

sql server 儲存過程執行帶輸出引數的動態 sql

CREATEprocedure pUserList(    @UserTypechar(2),    @pagenumint,    @perpagesizeint,    @pagetotalint out,    @rowcountint out)as    set nocount on     DECL

在Bootstrap開發框架的工作流模組實現流程完成後更新資料狀態處理

在開發檢視流程表單明細的時候,在Web介面中,我們往往通過使用@RenderPage實現頁面內容模組化的隔離,減少複雜度,因此把一些常用的如審批、撤銷、會籤、閱辦等等的流程步驟都放到了通用處理的頁面ViewDetail.cshtml裡面實現了。那麼如果在一些特殊的表單處理過程中,我們在審批完成後需要觸發一個事

sql註入過程後臺數據庫類型的三種判斷方式

sql註入 安全測試 數據庫類型判斷 後臺數據庫類型判斷:一、通過頁面返回的報錯信息,一般情況下頁面報錯會顯示是什麽數據庫類型,在此不多說;二、通過各個數據庫特有的數據表來判斷: 1、mssql數據庫 http://127.0.0.1/test.php?id=1 and (sele

SQL儲存過程分頁

</pre><pre name="code" class="sql">ALTER proc [dbo].[GetGoodsLsit] ----分頁條件 @StartIndex varchar(20), @PageSize varchar(20), ----排序條件

sql在所有儲存過程查詢包含某字串的執行語句

直接在查詢分析器中執行以下程式碼就行: 方法一) select name from sysobjects o, syscomments s where o.id = s.id and text like '%test%' and o.xtype = 'P'   方法二)

oracle12C資料庫JSON的應用 --PL/SQL儲存過程JSON解析應用篇

最近有些專案在資料庫oracle中使用到json格式的資料互動,對於oracle12以上的版本都支援JSON格式資料的使用,剛剛接觸的猿們可以到上一篇oracle資料庫使用json的簡單入門,最好參考官方的API文件關於oracle官方API文件對JSON的支援; 下面就比較詳細的說一下,關

PCB MS SQL 儲存過程(CLR) 實現Json轉DataTable表的方法

 一.準備需轉為DataTable的json字串         原json字串資料 [{"TechName":"ECN","TechNo":"EC_01","id":"1"},{"TechName":"流程指示","TechNo":"PI

儲存過程傳參執行sql語句

CREATE OR REPLACE PROCEDURE XXX.xXX( //傳進來的引數值,使用逗號隔開 workProSchname in varchar2(200), xuenian in varchar2(200), typeid in varchar2(200),

無意發現的sql server 儲存過程加密破解方法

轉自:https://blog.csdn.net/gatr/article/details/51226122  儲存過程是資料庫中一個非常重要的該部分,很多業務邏輯都可能寫在儲存過程裡面,為了安全,部分儲存過程是加密存放的,如果我們想看到原始碼,就非常困難了,在sql  se

SQL Server資料庫的儲存過程定義的臨時表,真的有必要顯式刪除(drop table #tableName)嗎?

問題背景 在寫SQL Server儲存過程中,如果儲存過程中定義了臨時表,有些人習慣在儲存過程結束的時候一個一個顯式地刪除過程中定義的臨時表(drop table #tName),有些人又沒有這個習慣,對於不明真相的群眾或者喜歡思考的人會問,儲存過程中定義的臨時表,最後要不要主動刪除,為什麼

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

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

[轉]SqlServerSql檢視儲存過程

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

SQL SERVER-儲存過程實現CRUD

CREATE PROCEDURE RegionUpdate (     @RegionID int,     @RegionDescription nvarchar(100) ) AS BEGIN     

C#呼叫SQL儲存過程有output引數

           string strsql = string.Format("Sp_AutoTenderTrialAll");            SqlParameter[] sqlParam = new SqlParameter[]{             new SqlParameter("@

Oracle PL/SQL程式設計-儲存過程優缺點及實現過程【1】

如果儲存過程名已經被佔用,兩種方式:1.修改儲存過程名;2新增關鍵字 or replace :表示如果有yao_prol,就替換。eg:SQL> create or replace procedure yao_prol is  2      begin  3      insert into YAO_T

Sql Server儲存過程輸入和輸出引數(簡單例項,一看就懂)

-- ===================【建立儲存過程】===================== USE [Message] GO /****** Object: StoredProcedure [dbo].[讀取外部資料庫查詢] Script Date: