Ci scusiamo per la lunghezza di questo, sto cercando di fornire molte informazioni per evitare soluzioni non rilevanti.Aggiornamento SQL dall'istruzione select
Il mio obiettivo è quello di incorporare almeno 1 UPDATE in un'istruzione SELECT in modo da avere la possibilità di aggiornare alcuni valori calcolati presso l'istante prima che i selezionare eseguita l'istruzione (pensare ad esso come un TRIGGER su SELECT). VIEW non è in soluzione immediata, dal momento che sono vincolato dal sistema che sto usando (vedi sotto).
Sto personalizzando un ERP commerciale di terze parti che è debole sulle funzionalità (il sistema rimarrà senza nome! - il risultato è che non ne hai mai sentito parlare, ma non è nemmeno cresciuto a casa). Ha una funzione di interrogazione in scatola dove posso usare un testo/GUI per costruire una query SELECT. Una volta salvata una query, gli utenti possono fare clic sulla query per eseguirla e vedere i risultati. ERP viene eseguito su MS SQL Server 2000; l'aggiornamento della versione NON è nelle carte in questo momento. Posso scrivere qualsiasi set di funzionalità di cui ho bisogno al di fuori dell'ERP in qualsiasi lingua io voglia, l'ho fatto in passato, se le funzionalità lo giustificano. Ma la mia comunità di utenti trova più facile quando le mie personalizzazioni possono essere fatte nel sistema ERP.
La query può essere arbitrariamente complessa, ma il pacchetto ERP crea la stessa istruzione SQL Select. Interno alla ERP compilato è qualcosa di simile (questa è solo una supposizione!):
"SELECT " + fieldList + " FROM " + tableListAndJoins + " WHERE " + whereCond
La GUI builder aiuta gli utenti meno esperti a costruire il fieldList e così via, ma è possibile ignorare e scrivere le clausole nel testo il più a lungo come SQL è valido quando combinato come sopra.
Non riesco a trovare un incantesimo per eseguire una stored procedure come effetto collaterale di un'istruzione SELECT, sia nella clausola select, dove clausola, ecc. Non mi interessa davvero come faccio a jailbreak del sistema - un attacco di SQL injection stabile andrebbe bene, a patto che non significasse che dovevo modificare la sicurezza del server sql sottostante. Ho esaminato le UDF, ma non è possibile inserire un'istruzione UPDATE in una UDF scalare e non ha senso cercare di modificare il ritorno di una tabella UDF (o no?). Se riesci ad AGGIORNARE da una VISTA, vorrei vedere un esempio, ma mi rendo conto che posso usare una VISTA per calcolare colonne e questa non è la soluzione che sto cercando. Ho letto una dichiarazione allusiva online sulla possibilità di utilizzare una sorta di XP_ per realizzare questo, ma per quanto riguarda XP_ o come farlo, non lo so.
a questa domanda non è una soluzione, in sé e per sé: Updating a table within a select statement
ricerca FYI ulteriore suggerisce che una funzione CLR potrebbe ottenere me c'è ma le funzioni CLR non sono disponibili in SQL 2000. – user130582