Pergunta

Tudo eu li diz que ao fazer um procedimento armazenado gerenciado, com o botão direito no Visual Studio e escolha Implantar. Isso funciona bem, mas o que se eu quiser implantá-lo fora do Visual Studio para um número de locais diferentes? Eu tentei criar o conjunto com a dll o projeto construído em SQL, e enquanto ele não adicionar a montagem, não criar os procedimentos fora do conjunto. Alguém já descobriu como fazer isso em SQL diretamente, sem utilizar o Visual Studio?

Foi útil?

Solução

Copie o arquivo DLL de montagem para a unidade local em seus vários servidores. Em seguida, registrar a sua montagem com o banco de dados:

create assembly [YOUR_ASSEMBLY]
from '(PATH_TO_DLL)'

... então você criar uma função que faz referência ao método público apropriado na DLL:

create proc [YOUR_FUNCTION]
as
external name [YOUR_ASSEMBLY].[NAME_SPACE].[YOUR_METHOD]

Certifique-se de usar os [colchetes, especialmente em torno da NAME_SPACE. Namespaces pode ter qualquer número de pontos neles, mas identificadores SQL não pode, a menos que as partes são explicitamente separado por colchetes. Esta foi uma fonte de muitas dores de cabeça quando eu estava usando primeiro SQL CLR.

Para ser claro, [YOUR_ASSEMBLY] é o nome que você definiu no SQL; [NAME_SPACE] é o namespace .NET dentro da DLL onde o seu método pode ser encontrada; e [YOUR_METHOD] é simplesmente o nome do método dentro desse namespace.

Outras dicas

Para adicionar um pouco mais detalhadamente / clarificação de @ de kcrumley anwser acima:

[NAME_SPACE] é o Tipo de nome totalmente qualificado e não apenas o namespace
-. Ou seja, se sua classe é chamado StoredProcedures em um espaço de My.Name.Space, você deve usar [My.Name.Space.StoredProcedures] para a parte [NAME_SPACE]

Se os procedimentos armazenados gerenciados estão em uma classe sem um namespace definido, basta usar o nome da classe nua (por exemplo [StoredProcedures]).

Eu também lutou um pouco tentando descobrir como adicionar um procedimento com argumentos / parâmetros. Então, aqui está um exemplo para qualquer outra pessoa tentar fazê-lo:

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int,
    @parameter2 nvarchar
) 
WITH EXECUTE AS CALLER 
AS
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top