SQL Server CLR Integration passo a passo

Apesar dos assemblies em .net terem surgido no SQL Server 2005, frequentemente surgem dúvidas relacionadas a implementação. Abaixo segue um pequeno passo a passo de como iniciar o uso do CLR no SQL Server.
O objetivo aqui será criar uma stored procedure que ao ser executada imprima o retorno “Alô Mundo”. Para este desenvolvimento vou utilizar o Visual Studio 2008 com Visual Basic e o SQL Server 2008 R2.
No momento da codificação do objeto de banco de dados no Visual Studio vamos utilizar um objeto chamado SQLPipe. O SQLPipe é o mecanismo utilizado para enviar um objeto de comando de volta ao objeto que o chamou.
Antes de iniciar os passos a seguir garanta que você tem permissão no servidor de banco de dados. Crie um banco de dados teste para aplicar o assembly que será criado.
No menu File do Visual Studio selecione New Project, na tela de Projects Types selecione Database, no painel Templates selecione SQL Server Project.

 

Ao confirmar a criação deste projeto abrirá uma janela New Database Reference, com pedindo os parâmetros de configuração para acessar o database alvo do desenvolvimento.

No Solution Explorer vamos visualizar a estrutura padrão do template selecionado, para criar a Stored Procedure clique com o botão direito sobre o ícone do projeto (SqlServerProject1) e selecione Add em seguida Stored Procedure.

 

Ao adicionar o stp_AloMundo.vb ao projeto o mesmo criará uma classe, que será o alvo da edição. Veja o código abaixo:

Deploy do Assembly

O deploy é o processo de entregar o assembly ao destino, nesse caso o banco escolhido no inicio do projeto. Para concluir o deploy basta acessar o menu build e deploy.

Executando a Stored Procedure

Os Assenblies ficam dentro de Programmability, e os objetos pertencentes aos assemblies ficam dentro da pasta dos seus respectivos objetos. Perceba na imagem abaixo que dentro de Stored Procedures há um objeto chamado stp_AloMundo, esse é o fruto do desenvolvimento.

A execução segue como qualquer outra stored procedure do SQL Server, com a sintaxe padrão.

Para finalizar, são diversas as vantagens do uso de .Net Assemblies com o SQL Server entre os quais a mais significativa, na minha opinião, é a poder centralizar alguma regra especifica do negócio sem atribuir ao SQL Server esse processamento.

Abraço, Rodrigo.

SQL Server Management Pack

A Microsoft lançou no último dia 7 de maio o SQL Server Management Pack para System Center Operations Manager 2007.

Esse pacote permite monitorar instâncias, bancos de dados, SQL Server Agent, Jobs e outros das versões 2005, 2008 e 2008R2 do SQL Server. Isso tudo com suporte as edições Enterprise, Standard e Express tanto para aquiteturas 32bits, 64bits e ia64.

No mesmo link de acesso ao Pack há um Guia bem detalhado com instruções.

Para download acesso o link do Microsoft Download Center.

Abraço, Rodrigo

Database ‘dbname’ is in transition

Hoje ao colocar um banco de dados em modo offline obtivemos a desagradável mensagem de erro 5061 com a mensagem “Database ‘dbname’ is in transition. Try the statement later.”, após tentar algumas soluções obvias, buscamos ajuda na web e nada funcionou.

No entanto resolvemos o problema, segue aqui como resolvemos o problema, isso pode não resolver o problema de todo mundo, mas se alguém por algum motivo precisar não custa tentar os passos abaixo:

·         Resetar o status do banco de dados;

·         Fechar a console do Management Studio (não sei por que, mas sem fechar a console o erro persiste, se alguém souber e quiser comentar);

·         E colocar o banco de dados como Restricted_User.

Nenhum dos links abaixo resolveu nosso problema, mas também nenhum deles fala de uma descrição de erro igual a que tivemos, ainda assim segue a lista dos links usados pode ser que em alguma outra situação possa ser útil.

http://social.msdn.microsoft.com/Forums/en/sqlsmoanddmo/thread/51d8872b-20cc-4311-9907-41ae44ca096a

http://www.geakeit.co.uk/2010/12/11/sql-take-offline-fails-alter-database-failed-because-a-lock-could-not-error-5061/

http://sql-server-performance.com/Community/forums/t/9720.aspx

Aproveito para agradecer ao colega @prettoandre pelo apoio no momento de pesquisar as soluções.

Abraço, Rodrigo