Disculpe por la duración de esto, estoy tratando de dar mucha información para evitar soluciones no relevantes.Actualización de SQL desde la instrucción de selección
Mi objetivo es incrustar al menos 1 instrucción UPDATE en una instrucción SELECT para que tenga la oportunidad de actualizar algunos valores calculados en el instante antes de que se ejecute la instrucción select (piénselo como un GATILLO en SELECCIONAR). VIEW no está en una solución inmediata, ya que estoy limitado por el sistema que estoy usando (ver a continuación).
Estoy personalizando un ERP comercial de un tercero que es débil en las características (¡el sistema seguirá siendo anónimo! - El resultado es que no ha oído hablar de él, pero tampoco lo ha hecho en casa). Tiene una función de consulta enlatada donde puedo usar un texto/GUI para construir una consulta SELECT. Una vez que guardo una consulta, los usuarios pueden hacer clic en la consulta para ejecutarla y ver los resultados. ERP se ejecuta encima de MS SQL Server 2000; la actualización de la versión NO está en las tarjetas en este momento. Puedo escribir cualquier conjunto de características que necesite fuera del ERP en el idioma que desee, he hecho esto en el pasado, si las características lo ameritan. Pero a mi comunidad de usuarios les resulta más fácil cuando se pueden realizar mis personalizaciones en el sistema ERP.
La consulta puede ser arbitrariamente compleja, pero el paquete ERP crea la propia instrucción SQL Select. Interna a la ERP compilado es algo como esto (esto es sólo una conjetura!):
"SELECT " + fieldList + " FROM " + tableListAndJoins + " WHERE " + whereCond
El constructor de interfaz gráfica de usuario ayuda a los usuarios novatos construir el fieldList y así sucesivamente, pero se puede prescindir de ella y escribir las cláusulas en el texto, siempre y como el SQL es válido cuando se combina como arriba.
Parece que no puedo encontrar un encantamiento para ejecutar un procedimiento almacenado como un efecto secundario de una instrucción SELECT, ya sea en la cláusula select, cláusula where, etc. Realmente no me importa cómo hago jailbreak en el sistema - un ataque de inyección SQL estable estaría bien, siempre y cuando no significara que tuviera que modificar la seguridad del servidor SQL subyacente. He observado las UDF, pero no se puede poner una instrucción UPDATE en una UDF escalar, y no tiene sentido intentar modificar la devolución de una tabla UDF (¿o no?). Si puede ACTUALIZAR desde dentro de una VISTA, me gustaría ver un ejemplo, pero me doy cuenta de que puedo usar una VISTA para calcular columnas y esa no es la solución que estoy buscando. Leí una sugestiva declaración en línea sobre poder usar algún tipo de XP_ para lograr esto, pero en cuanto a qué XP_ o cómo hacerlo, no sé.
esta pregunta no es una solución, en sí mismo: Updating a table within a select statement
FYI investigación adicional sugiere que una función CLR podría llevarme allí, pero las funciones CLR no están disponibles en SQL 2000. – user130582