2010-11-18 10 views
1

J'ai une base de données SQL qui n'a que des permissions de lecture, donc je ne peux pas ajouter mes seules proc ou fonctions stockées, et je cherche un moyen de compléter ma mission sans obtenir la permission d'administrateur (le logiciel n'a que des permissions de lecture pour les développeurs et ne permet pas un accès complet, c'est pourquoi je cherche un autre moyen)sql sélectionnez l'instruction en utilisant une FONCTION sans accès à la base de données SQL dans .Net

Ce que j'ai est une table dont je veux tirer des enregistrements, mais pour ce faire, il est nécessaire de faire des calculs sur les champs pour calculer les longueurs.

Y at-il un moyen. Net ou en utilisant un fichier de script SQL que je peux exécuter qui va accomplir cela? Je ne sais pas si je dois faire toutes les pensées pour obtenir les résultats nécessaires -créer une table temporaire -Insérer dans les champs de table temporaires d'une table et la valeur calculée -où valeur calculée est inférieure à 100

(maintenant je peux le faire en utilisant des instructions CREATE mais ce n'est pas bon, comme ci-dessus, il n'y a pas d'accès DB pour créer quelque chose .. donc il doit être un type de code dynamique qui ne peut pas sélectionner et fonctionne en même temps). Voici un exemple du code SQL de ce que je suis en train de taper pour travailler dans le code .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 

et la fonction ressemble

DECLARE @ZIP FLOAT 

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

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

    RETURN @ZIPCalc 

donc en .Net je peux connecter à la DB et obtenir des résultats, mais une idée sur la façon dont je peux utiliser une fonction avec une instruction SELECT pour tirer des résultats?

grâce

+0

Pouvez-vous faire votre calcul pour max zip dans un autre appel SQL, puis passer à votre sélection SQL d'origine? – Paddy

+0

Salut Paddy .. mais comment puis-je inclure la fonction dans l'instruction select de sorte que sa partie de l'ensemble de retour .. sa la partie FONCTION du travail sql qui im ​​coincé avec – Greg

Répondre

1

Utilisez un Common Table Expression pour calculer la valeur.

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 .. merci Anthony, a dû modifier un peu comme je ne pense pas que je pourrais utiliser la partie créer une table de temp, mais avec une petite modification je l'ai travailler :) – Greg