Pour faire une histoire courte ...Construire une table temporaire avec SQL dynamique dans SQL Server 2008
Je construis une application Web dans laquelle l'utilisateur peut sélectionner une combinaison d'environ 40 paramètres. Cependant, pour l'un des résultats souhaités (expérience d'investissement), je dois extraire des informations d'une table différente et comparer les valeurs dans six colonnes différentes (stock exp, fonds mutuels exp, etc.) et retourner uniquement la valeur la plus élevée des six pour cet enregistrement spécifique.
Ce n'est pas le problème. Le problème est que lors de l'exécution, ma requête pour trouver l'investissement exp ne connaît pas nécessairement l'identifiant du compte. Considérant qu'un scan de table apporterait bien plus d'un demi-million de clients, ce n'est pas une option. Donc ce que j'essaye de faire est d'éditer une copie de ma requête principale construite dynamiquement, mais au lieu de renvoyer 30+ colonnes, ça retournera simplement 2, l'accountid et l'experienceid (qui est le PK pour la table d'expérience) donc je peut faire l'affaire de filtrage.
Certains d'entre vous peuvent définir un SQL dynamique un peu différent de moi-même. Ma requête est une chaîne qui, selon les arguments envoyés à ma procédure, des parties de la clause where seront activées ou désactivées par des commutateurs. À la fin je l'exécute, tout est fait du côté serveur, toute l'application web envoie un tableau d'arguments à mon proc.
Mon plus code simplifié ressemble essentiellement comme ceci:
declare @sql varchar(8000)
set @sql =
'select [columns]
into #tempTable
from [table]
[table joins]' + @dynamicallyBuiltWhereClause
exec(@sql)
après cette partie j'essaie d'utiliser #temptable pour le processus de filtrage de l'expérience de l'investissement, mais je reçois une erreur me disant #temptable n'existe pas.
Une aide précieuse serait grandement appréciée.
bien que ma procédure va recevoir 40+ arguments par défaut à null, et une série de vérifications de valeur agira comme commuté pour construire la clause where. Merci d'ailleurs, j'ai complètement oublié la portée (je suis nouveau) et les 2 signes de hachage ont aidé. Merci. – IWriteApps