久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何將用戶定義的表類型傳遞給內聯函數

How to pass user-defined table type to inline function(如何將用戶定義的表類型傳遞給內聯函數)
本文介紹了如何將用戶定義的表類型傳遞給內聯函數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有一些復雜的函數,我想在多個查詢中使用它們.它獲取一些值列表并返回聚合值.

I have some complex function that I want to use in number of queries. It gets some list of values and return aggregate value.

例如(我簡化了,實際上更復雜):

For example (I simplify it, it is more complex in deed):

CREATE FUNCTION Mean(@N Numbers READONLY)
RETURNS TABLE AS RETURN (
    SELECT mean = SUM(n.value) / COUNT(*) FROM @N n
)

我想在查詢中使用它:

SELECT d.DepartmentName, MeanRate = m.mean
FROM Departments d
CROSS APPLY Mean(
    (
        SELECT value = e.Rate
        FROM Employees e
        WHERE e.DepatmentId = d.DepatmentId
    )
) m

但我收到一個錯誤:操作數類型沖突:浮點數與數字不兼容

But I get an error: Operand type clash: float is incompatible with Numbers

我知道我可以使用游標或將值作為 XML 傳遞,但我認為這種方式比內聯函數和表變量慢.

I know that I can use cursor or pass values as XML, but I think this ways are slower than inline function and table variables.

如何將值列表傳遞給內聯函數?

How can I pass a list of values to inline function?

推薦答案

首先你應該使用 Inline 函數中使用的 table type(Number) 創建一個 table 變量.

First you should create a table variable using the table type(Number) used in the Inline function.

將需要的行插入表變量并傳遞表變量 o 內聯函數

Insert the required rows into table variable and pass the table variable o Inline function

你需要做這樣的事情

declare @Numbers Numbers

Insert into @Numbers 
select e.Rate
From Employees  E join 
Departments d on e.DepatmentId = d.DepatmentId

select * from Mean(@Numbers)

更新:根據您的評論

創建一個新的表格類型.

CREATE TYPE Dept_number AS TABLE
(
DepatmentId  INT ,value numeric(22,6)
);

Alter 函數

ALTER FUNCTION Mean(@dept_number DEPT_NUMBER readonly) 
returns TABLE 
AS 
    RETURN 
      (SELECT depatmentid, 
              mean = Sum(n.value) / Count(*) 
       FROM   @dept_number n 
       GROUP  BY depatmentid) 

調用函數

DECLARE @dept_number DEPT_NUMBER 

INSERT INTO @dept_number 
            (depatmentid, 
             value) 
SELECT d.depatmentid, 
       e.rate 
FROM   employees E 
       JOIN departments d 
         ON e.depatmentid = d.depatmentid 

SELECT * 
FROM   Mean(@dept_number) 

這篇關于如何將用戶定義的表類型傳遞給內聯函數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Modify Existing decimal places info(修改現有小數位信息)
The correlation name #39;CONVERT#39; is specified multiple times(多次指定相關名稱“CONVERT)
T-SQL left join not returning null columns(T-SQL 左連接不返回空列)
remove duplicates from comma or pipeline operator string(從逗號或管道運算符字符串中刪除重復項)
Change an iterative query to a relational set-based query(將迭代查詢更改為基于關系集的查詢)
concatenate a zero onto sql server select value shows 4 digits still and not 5(將零連接到 sql server 選擇值仍然顯示 4 位而不是 5)
主站蜘蛛池模板: av天天干| 中文字幕1区2区 | www.嫩草| 精品视频在线一区 | 久久精品国产v日韩v亚洲 | 蜜桃av鲁一鲁一鲁一鲁 | 亚洲视频手机在线 | 久久久久久综合 | 波多野结衣av中文字幕 | 精品一区在线 | 91综合网 | 一级毛片免费 | 亚洲精品综合 | 亚洲综合中文字幕在线观看 | 国产精品久久亚洲 | 国产欧美精品一区二区三区 | 亚洲精品黄色 | 中文字幕一区在线观看视频 | 国产高清在线精品一区二区三区 | 欧美精品首页 | 全免费a级毛片免费看视频免 | 国产操操操| 日本大片在线播放 | 国产伊人久久久 | 国产真实乱对白精彩久久小说 | 成人在线视频免费看 | 亚洲一区二区免费 | 国产精品美女久久久免费 | 成人国产精品久久 | 男人的天堂亚洲 | 精品欧美一区二区三区精品久久 | 蜜臀久久99精品久久久久久宅男 | 蜜月va乱码一区二区三区 | 欧美日韩在线看 | 欧美一级视频免费看 | 国产精品日韩欧美一区二区三区 | 亚洲精品一区中文字幕 | 精品久久久久久 | 国产黄色在线观看 | 日韩成年人视频在线 | 怡红院免费的全部视频 |