Me encontré con algo extraño ... hay un código en nuestro sitio que está tomando una declaración de SQL gigante, modificándola en código haciendo una búsqueda y reemplazando basada en algunos valores de usuario, y luego pasándola a SQL Servidor como una consulta.¿Cómo debo pasar el nombre de una tabla a un proceso almacenado?
Estaba pensando que esto sería más limpio como una consulta parametrizada a un proceso almacenado, con los valores del usuario como los parámetros, pero cuando miré más de cerca, pude ver por qué podrían estar haciéndolo ... la tabla que ellos están seleccionando de es variablemente dependiente de esos valores de usuario.
Por ejemplo, en un caso, si los valores eran la consulta terminaría siendo algo así como "SELECT * FROM foo_bar"
("BAR" "foo") ¿Existe una manera fácil y clara para hacer ¿esta? Todo lo que intento parece poco elegante.
EDIT: Pude, por supuesto, generar dinámicamente el sql en el proceso almacenado y ejecutarlo (bleh), pero en ese punto me pregunto si he ganado algo.
Edit2: Refactorizando los nombres de las tablas de alguna manera inteligente, dicen que tener a todos en una mesa con los diferentes nombres como una nueva columna sería una buena manera de resolver todo esto, que varias personas han señalado directamente , o aludido a. Lamentablemente, no es una opción en este caso.
SQL-Server 2008 permite variables TABLE. –
@Lance: Cierto, sí, pero creo (podría estar equivocado) que funcionan de manera diferente a eso. Una variable de tabla almacena datos de tabla, no nombres de tabla. Es un concepto similar a una tabla temporal. – Beska
No tiene que "refactorizar los nombres de la tabla", ya se encuentran en la vista suministrada por el sistema: INFORMATION_SCHEMA.TABLES. – RBarryYoung