1. 程式人生 > >SQL儲存過程呼叫標量值函式,儲存過程呼叫儲存過程

SQL儲存過程呼叫標量值函式,儲存過程呼叫儲存過程


一、存 儲過程呼叫標量值函式

先建一個標量值函式,如

CREATE FUNCTION [dbo].[F_Num]
(
@a nvarchar(50)
)
RETURNS nvarchar(50)
AS
BEGIN
declare @m nvarchar(50)
select @[email protected]+'aad'
return @m
END

接下來
在儲存過程中可以直接如下呼叫:

select Title,Content,(select dbo.F_Num(Content)) as a from tb_News where ID='BH100001'

或者:

declare @char nvarchar(20)
set @char=dbo.F_Num('ddddadqqqqq')

二、儲存過程呼叫儲存過程,寫法一般是(個人總結的,不對的請見諒)

1、在被呼叫的儲存過程裡,我個人覺得應該寫一個輸出引數,如:

create PROCEDURE [dbo].[P_GetMaxVersion]  
@tablename varchar(50),
 @version int output
AS
set @version=2
end

在呼叫儲存過程裡,寫上

 declare @Version int  
 exec P_GetMaxVersion 'BaseClient',@Version output  

那@Version就被賦上了值2

2、建立一個臨時表

create proc GetUserName
as
begin
    select 'UserName'
end

Create table #tempTable (userName nvarchar(50))
insert into #tempTable(userName)
exec GetUserName
select #tempTable

3、第三種方法:宣告一個變數,用exec(@sql)執行(注:這種方法我也沒測試過,我是在網上摘抄的,以備用)

declare @rsql varchar(250)
        declare @csql varchar(300)
        declare @rc nvarchar(500)
        declare @cstucount int
        declare @ccount int
        set @rsql='(select Classroom_id from EA_RoomTime where zc='[email protected]+' and xq='
[email protected]
+' and T'[email protected]+'=''否'') and ClassroomType=''1''' --exec(@rsql) set @csql='select @a=sum(teststucount),@b=sum(classcount) from EA_ClassRoom where classroom_id in ' set @[email protected][email protected] exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output--將exec的結果放入變數中的做法 --select @[email protected] --select @cstucount

以上純屬是個人的一些感想,也沒認真的測試過,有錯的話,請大家指正。

相關推薦

SQL儲存過程呼叫標量函式儲存過程呼叫儲存過程

一、存 儲過程呼叫標量值函式 先建一個標量值函式,如 CREATE FUNCTION [dbo].[F_Num] ( @a nvarchar(50) ) RETURNS nvarchar(50) AS BEGIN declare @m nvarchar(50) selec

SQLServer 表函式標量函式 定義方式與呼叫區別

SQLServer 表值函式與標量值函式 定義方式與呼叫區別 轉載自:http://blog.sina.com.cn/s/blog_648861b901012ay2.html SQLServer 

sqlserver自定義函式標量函式函式

在sqlserver中,根據函式返回值形式的不同將使用者自定義的函式分為”標量值函式“和”表值函式“兩種型別。如下圖所示,可以在資料庫中的可程式設計->函式中進行檢視。 標量函式,返回單個值,表值函式返回表資料 1.標量值函式 標量值函式返回一個確定型別的標量值,其

【mybatis】mybatis呼叫sqlserver儲存過程和表函式

儲存過程和表值函式的區別 最簡單的區別是儲存過程是pr開頭的,而儲存過程是fn開頭的,表值函式返回的是一個表結構的結果。如果mybatis用呼叫儲存過程的方式去呼叫表值函式,就會丟擲以下的異常: exc

SQL 標量函式呼叫

                呼叫 MS SQL 標量值函式,應該在函式前面加上 "dbo.",否則會報 “不是可以識別的 內建函式名稱”錯誤。例如    DECLARE @WhichDB TINYINT;    SELECT @WhichDB = dbo.user_GetWhichDB(1);--看看是哪

sql 將‘1,2,3,4’轉成相應的表欄位分隔表函式一行變多行

再設計表的時候我們經常遇到這樣的情況,欄位的值為1,2,3,4 等字元隔開的情況,存的是數字,但是顯示的時候是對應的類別,直接上圖,清楚明瞭, 如何想得到 分兩步完成,步驟如下: 第一步先創造 一個表值函式,將1,2,3,4 轉化為 函式是從網上找來的,程式碼如下:

資料庫之SQL(Transact-SQL-聚合函式、時間函式標量函式、表函式

我們在SQL查詢中除了數學函式、字串函式外還用很多實用的函式,今天就對聚合函式,時間函式,使用者自定義函式進行梳理。 一、聚合函式 聚合函式又被稱為列函式,即對列資料進行聚合。 常用的聚合函式:  ①、AVG()函式  問題:如何給查詢的結果新增列名? 新

SQL Server中表函式標量函式的比較

本文將討論一下SQL Server中表值函式與標量值函式的區別,說到函式,首先和儲存過程作個比較吧,兩者有一個共同點都是預編譯優化後儲存在磁碟中,所以效率要比T-SQL高一點點。值得注意的是,儲存過程可以建立或訪問臨時表,而函式不可以;同時函式不可以修改表中的資料,或呼叫產

sql中建標量函式

1. USE [AirDB_YiZhuang]    GO 2.CREATE FUNCTION co2iaqi (@val float) RETURNS int AS BEGIN-- Declare

根據某一指定的表名、列名及列來向前或向後N條查相關列SQL自定義標量函式

有時需要根據某一指定的列的值來向前或向後N條查相關的列值,那麼用此SQL自定義標量值函式可以取得相關的SQL語句: ALTER FUNCTION GetPreviousNextCodeSql (  @tableName varchar(50),  @codeFieldNam

sql函式標量函式的區別

  //-------------------------------------------------------------------------- 表值函式 表值函式和標量值函式的不同是 表值函式是返回一個Table型別 Table型別相當與一張儲存在記憶體中的一

sql中的表函式標量函式區別與用法

通俗來講: 聽名字就知道區別了  表值函式返回的是一張表結果,就和一個select查詢語句一樣,只不過裡面帶入了引數或者很複雜; 標量值函式返回的只是一個值 一 、表值函式又分為行內函數與多語句函式 (1)行內函數就是沒有函式主體表是單個 SELECT。 下面是一個不帶輸

sqlserver中的表函式標量函式

顧名思義:表值函式返回的是表,而標量值函式可以返回基型別 一、表值函式 使用者定義表值函式返回 table 資料型別。對於內聯表值函式,沒有函式主體;表是單個 SELECT 語句的結果集。 以下示例建立了一個內聯表值函式。此函式的輸入引數為客戶(商店)ID,而返回 de

SQLServer之修改標量函式

修改標量值函式注意事項 更改先前通過執行 CREATE FUNCTION 語句建立的現有 Transact-SQL 或 CLR 函式,但不更改許可權,也不影響任何相關的函式、儲存過程或觸發器。 不能用 ALTER FUNCTION 將標量值函式更改為表值函式。反之亦然。 不能使用 ALTER FUNCTION

SUM 是SQL語句中的標準求和函式如果沒有符合條件的記錄那麼SUM函式會返回NULL。但咱們想返回的是0而不是Null

但多數情況下,我們希望如果沒有符合條件記錄的情況下,我們希望它返回0,而不是NULL,那麼我們可以使用例如下面的方法來處理: SELECT COALESCE(SUM(field1),0) FROM ta

建立標量函式判斷某個欄位是否包含中文

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

試編寫一個函式實現在順序儲存方式下字串的strcompare(S1S2)運算

先介紹一下字串的順序儲存字串其實就是一種特殊的線性表,學過線性表後我們知道,線性表有順序儲存和鏈式儲存兩種儲存結構,那麼很容易想到字串也有兩種基本的儲存結構:順序串和鏈式串。其實也沒什麼好說的字串都知道,不就是0個或多個字元構成的有限序列嘛比如  T= “ABCD”順序表也剛

動態呼叫Python的函式物件方法以及屬性

def do_foo(): print "foo!" def do_bar(): print "bar!" class Print(): def __init__(self): self.x = 1; def

為什麼const物件只能呼叫const成員函式而不能呼叫非const成員函式

參考:http://www.cnblogs.com/cplinux/articles/5553716.html http://blog.csdn.net/lanxuezaipiao/article/details/41647333#comments 在c++中,我們可以

分割字串(標量函式)

資料庫:SQL2005 在專案中有遇到這樣的問題,就是查詢的輸入字串是否包含一個規定格式字串中。 比如說:查詢 1002 是否包含在 '1001,1002,1003' 中。 可以通過很多種方式實現。我這裡使用函式實現。如下: set ANSI_NULLS ON set Q