A questão não é "como" fazer uma reescrita, mas "onde" você quer que a reescrita aconteça. Você disse que quer algo no IIS, mas isso não é possível no MSSQL. No IIS, você tem o pipeline de processamento de solicitações e há muitos pontos em que você pode inserir seu código personalizado nesse pipelene (por exemplo, criar sua própria extensão ISAPI, HTTPModule, eventos no Global.asax)
No SQL Server, não há pipeline SQL aberto para desenvolvedores. Quando a solicitação SQL chegou ao servidor SQL, não é possível reescrevê-la. Triggers 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 essa tabela não existir, você receberá uma exceção antes de poder executar qualquer transação personalizada. lógica nos gatilhos.
No entanto, você pode "reescrever" SQL no cliente (não no SQL Server) criando o provedor de dados personalizado (se você tiver o aplicativo ADO.NET). Consulte MSDN - Implementando um provedor de dados do .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 MSSQL Data Provider padrão (System.Data.SqlClient) e substituir somente as funções nas quais deseja analisar SQL e substituir certos comandos.
Por favor, olhe também no link - este projeto consistia em criar um provedor de dados .NET personalizado para o SQL Server que pudesse fornecer automaticamente "nova tentativa na função "erro". Portanto, este não é um regravador SQL, mas pode ser usado como um exemplo para criar o seu próprio.