2010-11-18 19 views
1

erişilemeyen bir FUNCTION kullanarak deyimi kullanarak yalnızca saklı proc veya işlevleri ekleyemediğinden, yalnızca okuyucu izinlerine sahip bir SQL DB var ve tamamlamak için bir yol arıyorum benim görevim yönetici izni olmadan (yazılım sadece geliştiricilerin okuyucu izinlerine sahip ve tam erişime izin vermiyor, bu yüzden başka bir yol arıyoruz)sql SQL deyimi .net

Kayıtlarımı almak istediğim bir tablo var. Ancak bunu yapmak için, uzunlukları belirlemek için alanlar üzerinde bazı hesaplamalar yapılmasına ihtiyaç vardır.

.Net'in bir yolu var mı, yoksa bunu gerçekleştirebilecek bir SQL komut dosyası kullanarak mı? Şimdi (bir tablo VE hesaplanan değerden geçici tablo alanlarına -takın nerede hesaplanan değer az 100

olan bir geçici tablo -Create gerekli sonuçları elde etmek için tüm düşünceleri yapmanız gerekiyorsa Emin değilim Ben bunu CREATE deyimlerini kullanarak yapabilirim, ancak yukarıdaki gibi iyi bir şey yoktur, herhangi bir şey oluşturmak için DB erişimi yoktur. Bu nedenle, hem seçip hem de işlevlerini yerine getiremeyen dinamik kodun bir türü olması gerekir)

Burada çalışmak için yazdığım şeyin SQL kodunun bir örneğidir. Net kodu

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 

ve fonksiyon

DECLARE @ZIP FLOAT 

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

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

    RETURN @ZIPCalc 

böylece .NET i DB bağlanmak ve sonuçlar alabilirsiniz

gibi görünüyor, ama ben sonuçları çekmek için SELECT deyimi ile bir FUNCTION kullanabileceğine ilişkin bir fikrin?

sayesinde

+0

Başka bir SQL çağrısında maks zip için hesaplama yapar ve sonra bunu özgün sql seçiminize iletir misiniz? – Paddy

+0

Merhaba Paddy .. ama nasıl ayarlamak için FUNCTION select deyimi içinde kendi geri dönüş kümesi .. onun FUNCTION parçası – Greg

cevap

1

değerini hesaplamak için bir Common Table Expression kullanın.

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

Genius ile sıkışmış im çalışma .. teşekkürler Anthony, biraz çimdik zorunda kaldı Ben oluşturmak temp tablo parçası kullanabileceğini sanmıyorum, ama küçük bir değişiklik ile çalışıyorum :) – Greg

İlgili konular