Como implantar um procedimento armazenado gerenciado sem usando o Visual Studio?
-
02-07-2019 - |
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?
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]