2014-01-29 25 views
0

我意識到下面的函數是毫無意義的(它是在那裏解釋問題)。請看下面的SQL:函數作爲SQL語句的一部分

CREATE FUNCTION [dbo].[AddOne](@Number int) 
returns int 
    BEGIN 
     return @Number+1 
    END 

select * from dbusns where reference=dbo.AddOne(1) 

如果我創建函數,然後執行SQL語句然後將其與基準= 2返回該記錄,因爲我期望的那樣。

是否有作爲SQL語句的一部分執行函數的方法?即不在SQL Studio管理器中首先創建它,即沒有出現在SQL Studio管理器中的Database/Programmability/Scaler Valued Functions下面。

有沒有另一種方法來處理這可能沒有函數呢?

+2

你究竟在做什麼,因爲你不能調用一個不存在的函數?給我們真正的問題與一些真實的上下文 – Tanner

+0

這將是一種lambda函數,我認爲不可能在tsql中。 – Jayvee

+0

您是否想過一些類似於[CTE](http://technet.microsoft.com/en-us/library/ms190766(v = sql.105).aspx)這是一個「排序」臨時/單一使用視圖?如果是這樣,否,沒有類似的功能來定義其他類型的對象。 –

回答

0

如果您不創建/定義該功能,它不存在。所以你不能稱它。
這在所有語言中都是一樣的,不僅僅在SQL/T-SQL中。當然,在SQL Server中有一些內置函數。這些你不需要自己定義。

+0

是否有另一種方法來處理這個沒有函數? – w0051977

+1

那麼,你可以這樣做:'從dbusns中選擇*參考= 2'。 –

+1

檢查你的問題。似乎你在腦海中有一些你認爲你問了但卻沒有的東西。 –

0

不,你要求的是不能做的。

Common Table Expressions(CTE的)提供一種裝置,以限定一個臨時的,名爲結果集 - 就像一個一次性使用的視圖,或者作爲文件把東西:

公共表表達式(CTE)可以被認爲作爲是一個SELECT,INSERT,UPDATE,DELETE或CREATE VIEW語句的執行範圍內定義

有沒有類似的功能,讓你申報任何類似於用戶的臨時結果集定義的函數具有相同類型的語義 - 它只存在於一個跟隨g聲明。因此,如果您確實需要將您的邏輯封裝在「類似功能」(採用參數和/或返回標量而不是結果集)的東西中,那麼您唯一的選擇就是一個真正的永久功能。

相關問題