2010-11-18 65 views
1

我有一個只有讀取器權限的SQL DB,因此我無法添加我唯一存儲的proc或函數,並且正在尋找一種方法來完成我的任務沒有獲得管理員權限(該軟件只對開發者具有讀者權限,並且不允許完全訪問權限,這就是爲什麼我正在尋找另一種方式)SQL select語句使用函數而無需訪問SQL數據庫中的.Net

我所擁有的是我想從中拉出記錄的表,但要做到這一點,有必要對領域做一些計算來計算長度。

在.Net中有沒有一種方法,或者使用一個SQL腳本文件,我可以運行這將實現這一目標? 不知道我需要做的所有的想法來獲得所需的結果 - 創建臨時表 -insert到從表和計算值的臨時表中的字段 -where計算值小於100

(現我可以使用CREATE語句做到這一點,但這並不好,因爲上面沒有DB訪問來創建任何東西..所以它需要是某種類型的動態代碼,它不能在兩者中選擇和功能)

這裏是我打字的SQL代碼的示例.Net代碼

BEGIN 
CREATE TABLE #Listings 
(
AddressID varchar(50), Street varchar(50), City varchar(50), State varchar(50), 
    Zip varchar(50), ZipCalculatedValue Decimal(18,12) 
) 
INSERT INTO #Listings (AddressID, Street, City, State, Zip, ZipCalculatedValue) 
SELECT AddressID, Street, City, State, Zip, Name, bo.CalcZip(@ZIP) AS ZipCalculatedValue 
FROM tbl_Addresses 
WHERE dbo.dbo.CalcZip(@ZIP) <= @maxZIP 
ORDER BY Distance ASC 

SELECT * 
FROM #Listings 

和功能看起來像

DECLARE @ZIP FLOAT 

    SET @ZIPCalc = (@ZIP - 1000) --more code but removed to simplify 

    SET @ZIPCalc = (@ZIPCalc * 10) --result above more workings removed 

    RETURN @ZIPCalc 

所以在.net中我可以連接到數據庫,並得到結果,但我如何能使用函數使用SELECT語句來拉任何結果的想法?

感謝

+0

你可以在另一個SQL調用中計算max zip,然後將它傳遞給你原來的sql select嗎? – Paddy 2010-11-18 09:39:57

+0

嗨稻田..但我如何包括功能在選擇語句,使其返回設置其一部分..它的功能部分的工作,我堅持與 – Greg 2010-11-18 10:34:37

回答

1

使用Common Table Expression計算值。

WITH AddressWithCalc AS 
(
    SELECT AddressID, Street, City, State, Zip, 
     ((@ZIP - 1000) * 10) AS ZipCalculatedValue 
    FROM dbo.tbl_Addresses 
) 
INSERT INTO #Listings (AddressID, Street, City, State, Zip, ZipCalculatedValue) 
SELECT * 
FROM AddressWithCalc 
WHERE ZipCalculatedValue <= @maxZIP 
ORDER BY Distance ASC 
+0

天才..我感謝安東尼,不得不調整一點點因爲我不認爲我可以使用創建臨時表部分,但有一點修改我有它的工作:) – Greg 2010-11-19 01:14:56