2010-02-21 23 views
11

Por primera vez en muchos años que he estado haciendo un poco de programación T-SQL en SQL Server 2008 y había olvidado lo mal el lenguaje realmente es: el control¿Hay un reemplazo para Transact-SQL

  • Flujo (todas las cosas de principio/fin) se siente torpe
  • El manejo de excepciones es deficiente. Las excepciones no burbujean de la misma manera que lo hacen en cualquier otro idioma. No hay re-lanzamiento a menos que se codifican por sí mismo y la función raiserror ni siquiera está escrita correctamente (esto me causó algunos dolores de cabeza!)
  • manejo de cadenas es pobre
  • El único tipo de secuencia es una mesa. Tuve que escribir una función para dividir una cadena basada en un delimitador y tuve que almacenarla en una tabla que tenía las partes de la secuencia junto con un valor que indica la posición de la secuencia.
  • Si necesita hacer una búsqueda en el proceso almacenado, manipular los resultados es doloroso. Usted tiene que utilizar los cursores o cortar juntos un bucle while con una búsqueda anidada si los resultados contienen algún tipo de ordenar la columna

Me di cuenta que podía codificar hasta mis procedimientos almacenados usando C#, pero esto requerirá para conceder permiso al servidor para permitir funciones CLR, que no es una opción en mi lugar de trabajo.

¿Alguien sabe si hay alternativas a T-SQL dentro de SQL Server, o si hay algún plan para introducir algo? Seguramente tiene que haber una alternativa más moderna ...

PD: Esto no pretende iniciar una guerra de llama, estoy realmente interesado en cuáles son las opciones.

+0

Quizás esto ayude un poco con las secuencias: http://www.sommarskog.se/arrays-in-sql-2008.html – Skurmedel

+0

@Skurmedel: Gracias.Me he topado con artículos similares y pueden destacar que una vez que usas tsql tienes que poner todo en tablas para procesar una "lista" – Sean

Respuesta

8

No hay nada de malo en T-SQL; hace el trabajo para el que estaba destinado (excepto tal vez para la adición de estructuras de control de flujo, ¡pero estoy divagando!).

Quizás eche un vistazo a LINQ? Puede escribir CLR Stored Procedures, pero no lo recomiendo a menos que sea por alguna característica que falta (o manejo de cadenas pesadas).

+1

@Mitch: simplemente porque hace el trabajo, no lo hace estrictamente. significa que no tiene nada de malo. Si tiene que luchar con el idioma para hacer cosas simples, entonces me sugeriría que no es el mejor idioma. SQL Server es un DB de clase empresarial, debería tener un lenguaje de clase empresarial, no algo que parece improvisado. – Sean

+3

@Sean: T-SQL es un lenguaje de programación SQL basado en conjuntos: lo hace muy bien. T-SQL ** no ** es un lenguaje de procedimiento: maneja esos constructos no tan bien, pero eso no es para lo que está destinado en primer lugar. –

+3

Estoy de acuerdo con Mitch y Marc aquí. TSQL es excelente en operaciones basadas en conjuntos. Y una vez que sepa cómo usarlo correctamente, puede ser una herramienta muy poderosa. Quizás si Sean tiene demasiados controles de flujo en los procedimientos, hay demasiada lógica de negocios en la capa de la base de datos ... deshazte del control de flujo y te deshaces de todos tus problemas. – JoshBerke

2

desde mi punto de vista única alternativa a T-SQL en SQL Server es no utilizar SQL Server

Según su punto de picaduras de manejo delimitador pizca, Desde donde cames estas cadenas? Puede probar los servicios de integración y los "paquetes de ssis" para convertir datos de uno a otro. También hay una buena forma de acceder a datos que no son SQL a través de Servidores Vinculados,

3

Todos los otros lenguajes de procedimientos almacenados de bases de datos (PL/SQL, SQL/PSM) tienen los mismos problemas. Personalmente, creo que estos lenguajes son los correctos para lo que están destinados a ser utilizados: se usan mejor para hacer lógica basada en datos de código, especialmente. si quieres reutilizar eso para múltiples aplicaciones.

Así que supongo que mi pregunta es para usted, ¿por qué quiere que su programa se ejecute como parte del proceso del servidor de la base de datos? ¿No es eso lo que intentas resolver mejor en el nivel de aplicaciones o middleware? Allí puede tomar cualquier idioma o herramienta de procesamiento de datos de su elección.

+1

Sí, parte del procesamiento se realizará en el nivel de middleware, pero aún hay una cantidad razonable para hacer en los procedimientos almacenados. Además, en el mundo de Microsoft, ¿en qué nivel de middleware? No existe un concepto real de "servidor de aplicaciones" como WebLogic o JBoss, sino una combinación de SQL Server, MSMQ e IIS. – Sean

+0

Sean, tiendo a llamar cualquier cosa que no esté inmediatamente atornillada al front-end o middleware de la parte de atrás. Usted reafirma que lo hará en procedimientos almacenados, pero creo que aún necesita responderse a sí mismo: "¿por qué? ¿Qué perdería si lo hiciera en un componente externo?" –

+0

PL/SQL es muy superior a T-SQL, tiene un manejo de errores que realmente funciona y tiene paquetes. –

Cuestiones relacionadas