API do Microsoft SQL Server

API do Microsoft SQL Server

Eu tenho uma ideia para um aplicativo, mas o ideal seria que ele fosse capaz de escrever uma espécie de mecanismo de "reescrita de SQL" para MSSQL (da mesma maneira que os servidores HTTP podem ter módulos de "reescrita de URL") que poderiam cruzar instruções SQL antes o servidor lida com eles e executa outro código primeiro.

Isso é possível com MSSQL ou precisarei buscar um método alternativo para atingir meu objetivo?

Responder1

A questão não é “como” fazer uma reescrita, mas “onde” você deseja que a reescrita aconteça. Você disse que quer que algo seja como no IIS, mas isso não é possível no MSSQL. No IIS você tem um pipeline de processamento de solicitações e há muitos pontos onde você pode inserir seu código personalizado neste pipeline (ou seja, criar sua própria extensão ISAPI, HTTPModule, eventos em Global.asax)

No SQL Server não há pipeline SQL aberto para desenvolvedores. Quando a solicitação SQL chega ao servidor SQL, você não pode reescrevê-la. Os gatilhos BEFORE ou INSTEAD OF update/insert/delete não resolverão o problema se você quiser substituir o nome da tabela na consulta original porque se esta tabela não existir, você receberá uma exceção antes de poder executar qualquer negócio personalizado lógica em gatilhos.

No entanto, você pode "reescrever" o SQL no cliente (não no servidor SQL) criando o provedor de dados personalizado (se você tiver um aplicativo ADO.NET). VerMSDN - Implementando um provedor de dados .NET Framework. Esta não é uma tarefa fácil e exigirá muitos esforços. Em seu código, você pode reutilizar a maioria dos recursos padrão do provedor de dados MSSQL padrão (System.Data.SqlClient) e substituir apenas funções nas quais deseja analisar SQL e substituir determinados comandos.

Por favor, olhe tambémhttp://sqlfaultretryprovide.codeplex.com/- este projeto consistia em construir um provedor de dados .NET personalizado para SQL Server que pudesse fornecer automaticamente a função "repetir em caso de erro". Portanto, este não é um reescritor SQL, mas pode ser usado como exemplo para construir o seu próprio.

Responder2

Você pode usargatilhospara INSERT, UPDATE e DELETE, mas não há um gatilho equivalente para SELECT.

Uma abordagem alternativa seria escrever um programa que interceptasseChamadas TDS, modifica-os e os repassa ao SQL Server. Então você faria seu programa escutar na porta 1433 ou algo assim e em seu programa de configuração alteraria a porta do servidor SQL para escutar na porta 1434.

Responder3

Você provavelmente está pensando em criar uma camada de negócios no SQL. Se você estiver tentando modificar um aplicativo existente, poderá ter alguns problemas, pois os adaptadores SQL são todos proprietários, mas se seus aplicativos puderem ser modificados, você provavelmente poderá escrever uma camada de negócios para ficar no banco de dados, que processaria os comandos em o servidor SQL usando uma conexão de memória compartilhada.

Outra opção é um procedimento armazenado CLR mágico no qual você alimenta o SQL, que então o edita e executa no banco de dados SQL (usando uma conexão de contexto que é ainda mais rápida que a memória compartilhada).

Porém, tenha cuidado, pois o servidor SQL está muito bem escrito, algo como o que você está tentando alcançar provavelmente seria melhor alcançado no cliente usando uma API para que o processamento seja distribuído pelo número de clientes e permitindo que o servidor SQL otimize o SQL real sendo correr.

Responder4

Você pode escrever gatilhos que utilizem classes .net.

http://www.15seconds.com/issue/041006.htm

http://aspalliance.com/1273_CLR_Triggers_for_SQL_Server_2005.all

http://www.google.com/search?rlz=1C1_____enUS397US397&sourceid=chrome&ie=UTF-8&q=sql+.net+trigger

boa sorte.

informação relacionada