Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os procedimentos armazenados estendidos, empacotados como DLLs (bibliotecas de vínculo dinâmico) fornecem uma maneira de estender a funcionalidade do SQL Server por meio de funções desenvolvidas com Visual C++. Procedimentos armazenados estendidos são implementados como funções dentro de DLLs. Além das funções, procedimentos armazenados estendidos também podem definir tipos definidos pelo usuário e funções de agregação (como SUM ou AVG).
Quando um cliente executa um procedimento armazenado estendido, o SQL Server pesquisa a DLL associada ao procedimento armazenado estendido e carrega a DLL. O SQL Server chama o procedimento armazenado estendido solicitado e o executa em um contexto de segurança especificado. Em seguida, o procedimento armazenado estendido passa os conjuntos de resultados e retorna os parâmetros de volta ao servidor.
O SQL Server fornece extensões para o Transact-SQL (T-SQL) para permitir instalar assemblies verificáveis no SQL Server. O conjunto de permissões do SQL Server especifica o contexto de segurança, com os seguintes níveis de segurança:
Modo irrestrito: executar o código por sua conta e risco; o código não precisa ser verificável como fortemente tipado.
Modo de segurança: executar o código verificável como fortemente tipado; compilado com /clr:safe.
Importante
O Visual Studio 2015 foi preterido e o Visual Studio 2017 não dá suporte à criação de /clr:pure e /clr:safe de projetos verificáveis. Se você precisar de código verificável, recomendamos que traduza seu código para C#.
Para criar e carregar um assembly verificável em SQL Server, use os comandos Transact-SQL CREATE ASSEMBLY e DROP ASSEMBLY da seguinte maneira:
CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>
O comando PERMISSION_SET especifica o contexto de segurança e pode ter os valores UNRESTRICTED, SAFE ou EXTENDED.
Além disso, você pode usar o comando CREATE FUNCTION para associar a nomes de método em uma classe:
CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]
Exemplo
O script SQL a seguir (por exemplo, chamado "MyScript.sql") carrega um assembly em SQL Server e disponibiliza um método de uma classe:
-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from
'c:\stockNoEA.dll'
with permission_set safe
-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go
-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go
Os scripts SQL podem ser executados interativamente no Analisador de Consulta SQL ou na linha de comando com o utilitário sqlcmd.exe. A linha de comando a seguir se conecta ao MyServer, usa o banco de dados padrão, usa uma conexão confiável, entradas MyScript.sql e saídas MyResult.txt.
sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt