sql儲存過程,語句拼接,使用遊標
DECLARE @paramFoid NVARCHAR(50)
SET @paramNameCh = '張三,李四,'
SET @paramFoid = '441112197702157913,140107205632126715,'
DECLARE @sql VARCHAR(8000) --臨時存放sql語句
DECLARE @sqlWhere NVARCHAR(500)
DECLARE @sqlWhereNameCh NVARCHAR(500)
DECLARE @sqlWhereFoid NVARCHAR(500)
-- Insert statements for procedure here
IF (@paramNameCh IS NULL)
BEGIN
SET @paramNameCh=''
END
IF (@paramFoid IS NULL)
BEGIN
SET @paramFoid=''
END
IF (Charindex(',', @paramNameCh)>0)
BEGIN
SET @sqlWhereNameCh = ''
SET @sqlWhereFoid = ''
--解析
SET @paramFoid = REPLACE(@paramFoid, ',', ',')
SET @paramFoid = 'NI'
SET @paramFoid = REPLACE(@paramFoid, ',', ',NI')
DECLARE @foid VARCHAR(50)
DECLARE cursor1 CURSOR
FOR
--傳入引數
SELECT F1 FROM f_splitstr(@paramFoid,',')
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @foid
WHILE ( @@fetch_status = 0 )
BEGIN
IF (@sqlWhereFoid<>'')
BEGIN
SET @sqlWhereFoid = @sqlWhereFoid + ' or '
END
SET @sqlWhereFoid = @sqlWhereFoid + ' Charindex('''
FETCH NEXT FROM cursor1 INTO @foid
END
--關閉遊標
CLOSE cursor1
--釋放遊標
DEALLOCATE cursor1
SET @sqlWhereFoid = ' And (' + @sqlWhereFoid + ') '
--解析
SET @paramNameCh = REPLACE(@paramNameCh, ',', ',')
DECLARE @name VARCHAR(50)
DECLARE cursor1 CURSOR
FOR
--傳入引數
SELECT F1 FROM f_splitstr(@paramNameCh,',')
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @name
WHILE ( @@fetch_status = 0 )
BEGIN
IF (@sqlWhereNameCh<>'')
BEGIN
SET @sqlWhereNameCh = @sqlWhereNameCh + ' or '
END
SET @sqlWhereNameCh = @sqlWhereNameCh + ' Charindex('''
+ @name
+ ''', table.dbo.TA_PSRBASICINFO.PSR_CHNNAME)>0 '
FETCH NEXT FROM cursor1 INTO @name
END
--關閉遊標
CLOSE cursor1
--釋放遊標
DEALLOCATE cursor1
SET @sqlWhereNameCh = ' And (' + @sqlWhereNameCh + ') '
SET @sqlWhere = @sqlWhereNameCh + ' ' + @sqlWhereFoid
END
ELSE
BEGIN
SET @sqlWhere ='AND table.dbo.TA_PSRBASICINFO.PSR_CHNNAME LIKE ''%'
END
SET @sql =' SELECT n.FLT_DATE ,
n.FNO ,
n.PSR_NAME ,
n.PSR_CHNNAME ,
n.PSR_FOID_NONET ,
Airport_1.AirPt_Chn_NM ,
Airport_2.AirPt_Chn_NM ,
CASE WHEN n.PSR_STATUS=''AC'' THEN ''已完成'' ELSE ''未完成'' END AS PSR_STATUS
FROM ( SELECT table.dbo.FDC_FLIGHTINFO.FLT_DATE ,
table.dbo.FDC_FLIGHTINFO.FLT_AIRLINE
+ table.dbo.FDC_FLIGHTINFO.FLT_NUMBER AS FNO ,
table.dbo.TA_PSRBASICINFO.PSR_NAME ,
table.dbo.TA_PSRBASICINFO.PSR_CHNNAME ,
table.dbo.TA_PSRBASICINFO.PSR_FOID_NONET ,
FDC_STATION_1.STA_STACODE AS dep ,
FDC_STATION_2.STA_STACODE AS arr,
table.dbo.TA_PSRBASICINFO.PSR_STATUS
FROM table.dbo.FDC_FLIGHTINFO
INNER JOIN table.dbo.TA_PSRBASICINFO ON table.dbo.FDC_FLIGHTINFO.FLT_DOWNLOADID = table.dbo.TA_PSRBASICINFO.SEG_FLTID
INNER JOIN table.dbo.FDC_STATION FDC_STATION_1 ON table.dbo.FDC_FLIGHTINFO.FLT_FDCID = FDC_STATION_1.STA_FLTID
AND table.dbo.TA_PSRBASICINFO.SEG_DEPTNO = FDC_STATION_1.STA_STAINDEX
INNER JOIN table.dbo.FDC_STATION FDC_STATION_2 ON FDC_STATION_1.STA_FLTID = FDC_STATION_2.STA_FLTID
AND table.dbo.TA_PSRBASICINFO.SEG_DESTNO = FDC_STATION_2.STA_STAINDEX
WHERE ( table.dbo.TA_PSRBASICINFO.PSR_STATUS = ''AC'' ) ' + @sqlWhere + '
) AS n
INNER JOIN psbtable.dbo.Airport AS Airport_1 ON Airport_1.AirPt_Iata_Cd = n.dep
INNER JOIN psbtable.dbo.Airport AS Airport_2 ON Airport_2.AirPt_Iata_Cd = n.arr '
EXEC (@sql)
相關推薦
sql儲存過程,語句拼接,使用遊標
DECLARE @paramNameCh NVARCHAR(50) DECLARE @paramFoid NVARCHAR(50) SET @paramNameCh = '張三,李四,' SET @paramFoid = '441112197702157913,1
儲存過程中動態拼接sql,拼接單引號問題
create or replace procedure mergerOrder( v_ids in varchar2, v_productCode in varchar2, v_productCateCode in varchar2)
SQL儲存過程,函式
儲存過程和函式的區別: 儲存過程可以沒有返回值,函式必須有返回值; // 語法 CREATE PROCEDURE 儲存過程名(引數列表) BEGIN 儲存過程體; END 引數模式 IN , OUT
工作總結24 Windows的任務計劃,定時執行oracle儲存過程或語句塊
1、在pl/sql中,建立一個儲存過程 create or replace procedure pro as begin /***業務程式***/ commit; end pro; 2、在某
oracle的儲存過程寫法以及呼叫,各種遊標的介紹(靜態,動態,sys遊標的區別)
1、plsql下執行不帶引數的儲存過程 CALL getDeptCount(); 2、plsql下執行帶引數的儲存過程DECLARE,必須使用程式碼段,並且可以列印其中的輸出引數 salary varchar2(100); BEGIN getSalaryByE
SQL儲存過程呼叫標量值函式,儲存過程呼叫儲存過程
一、存 儲過程呼叫標量值函式 先建一個標量值函式,如 CREATE FUNCTION [dbo].[F_Num] ( @a nvarchar(50) ) RETURNS nvarchar(50) AS BEGIN declare @m nvarchar(50) selec
sql server建立儲存過程(有參,無參,有輸出)
student表已經有了,“建立”在中間,測試在最下面! select * from student; sid sname sex age tel s001 豐登兒 男 35 13527542451 s002 班克爾
SQL儲存過程 (時間段,迴圈,事務)
USE [SSIS_ExtractData] GO /****** Object: StoredProcedure [dbo].[sp_AntifakeAnalysis] Script Date: 05/05/2017 16:01:52 ******/ SET ANS
mysql 常用命令,語句規範,及日誌儲存
1.mysql常用命令 SELECT VERSION(); 顯示當前版本 SELECT NOW();顯示當前日期時間 SELECT USER(); 顯示當前使用者 2.mysql語句規範 1.關鍵字與函式名全部大寫 2.資料庫名稱,表名稱,欄位名稱等全部小寫 3
SQL儲存過程分頁與遊標使用
儲存過程: CREATE procedure p_splitpage @sql nvarchar(4000), --要執行的sql語句 @page int=1, --要顯示的頁碼 @pageSize int,&n
Oracle 儲存過程中傳送郵件,並支援使用者驗證 中文標題和內容
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
ASP.NET MVC + EF 利用儲存過程讀取大資料,1億資料測試很OK
看到本文的標題,相信你會忍不住進來看看! 沒錯,本文要講的就是這個重量級的東西,這個不僅僅支援單表查詢,更能支援連線查詢, 加入一個表10W資料,另一個表也是10萬資料,當你用linq建立一個連線查詢然後
呼叫儲存過程一次後,程式崩潰 (臨時表和表變數)
編寫了一個顯示資料的儲存過程,前臺視窗首次呼叫顯示資料正常,退出再次進入該視窗是程式崩潰 原因是:不要使用臨時表#temp,最好使用表變數@temp 我的簡單理解即使你在儲存過程中刪除了臨時表,但是也會導致程式出錯 下面深刻認識一下臨時表和表變數吧
【Oracle】PL/SQL 儲存過程 顯式遊標、隱式遊標、動態遊標
【Oracle】PL/SQL 顯式遊標、隱式遊標、動態遊標 2013年06月17日 09:02:51 AlphaWang 閱讀數:13009更多 個人分類: 【Database】 在PL/SQL塊中執行SELECT、INSERT、DELET
oracle儲存過程傳入in引數,返回結果集
create or replace procedure proc_report_TEST(zhxshss in varchar2, pcursor out sys_refcursor) as begi
儲存過程中的out,output,return 的使用
output 型別的引數需要在儲存過程的引數列表中新增。output型別的引數傳入儲存過程後還會返回其執行後的值。return value型別的引數不需要在儲存過程的引數列表中新增。return value型別的引數就是儲存過程最後return的值。 資料庫中使用out
mysql中的儲存過程之無引數,in、out、inout引數的講解
首先建立三個測試表: 如下: user表裡邊的欄位為userId,userName 使用者表 dept表裡邊的欄位為deptId,deptName部門表 other表裡邊的欄位為otherId,otherName 其他表 建立無引數儲存 create procedure 你
MVC呼叫儲存過程實現分頁,帶查詢條件
alter procedure P_GetPagedUserInfoByCondition @PageSize int,--表示每頁要顯示的記錄數 @CurrentPageIndex int,--表示當前要顯示第幾頁的資料 @RecordCount int output,--表示滿足條
儲存過程執行很慢,請求優化
SELECT TD.CourseID,TU.StudentUserID,COUNT(EU.ExerciseSubjectID) AS SubmitCouont ,COUNT(ES.ExerciseSubjectID)-COUNT(EU.ExerciseSubjectI
Oracle儲存過程物件(package,procedure etc...) 呼叫許可權 ----20180206
在一些技術論壇裡面,常常看到有朋友問這種問題: 為什麼我的使用者具有DBA許可權,卻無法在儲存過程裡面建立一張普通表呢? 下面就結合具體案例來談談這個問題: SQL> conn eric/eric; Connected.SQL> select * from dba_role_privs whe