Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los procedimientos almacenados extendidos, empaquetados como bibliotecas de vínculos dinámicos (DLL), proporcionan una manera de ampliar la funcionalidad de SQL Server a través de funciones desarrolladas con Visual C++. Los procedimientos almacenados extendidos se implementan como funciones dentro de archivos DLL. Además de las funciones, los procedimientos almacenados extendidos también pueden definir tipos definidos por el usuario y funciones de agregado (como SUM o AVG).
Cuando un cliente ejecuta un procedimiento almacenado extendido, SQL Server busca el archivo DLL asociado al procedimiento almacenado extendido y carga el archivo DLL. SQL Server llama al procedimiento almacenado extendido solicitado y lo ejecuta en un contexto de seguridad especificado. A continuación, el procedimiento almacenado extendido pasa los conjuntos de resultados y devuelve los parámetros al servidor.
SQL Server proporciona extensiones a Transact-SQL (T-SQL) para permitirle instalar ensamblados comprobables en SQL Server. El conjunto de permisos de SQL Server especifica el contexto de seguridad, con los siguientes niveles de seguridad:
Modo sin restricciones: ejecute el código bajo su propio riesgo; el código no requiere seguridad de tipos comprobable.
Modo seguro: ejecute código con seguridad de tipos comprobable; compilado con /clr:safe.
Importante
Visual Studio 2015 está en desuso y Visual Studio 2017 no admite la creación de proyectos comprobables /clr:pure y /clr:safe. Si necesita código comprobable, se recomienda traducir el código a C#.
Para crear y cargar un ensamblado comprobable en SQL Server, use los comandos de Transact-SQL CREATE ASSEMBLY y DROP ASSEMBLY de la siguiente manera:
CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>
El comando PERMISSION_SET especifica el contexto de seguridad y puede tener los valores UNRESTRICTED, SAFE o EXTENDED.
Además, puede usar el comando CREATE FUNCTION para enlazar con nombres de método en una clase:
CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]
Ejemplo
El siguiente script SQL (por ejemplo, denominado "MyScript.sql") carga un ensamblado en SQL Server y hace que un método de una clase esté disponible:
-- 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
Los scripts de SQL se pueden ejecutar de forma interactiva en el Analizador de consultas SQL o en la línea de comandos con la utilidad sqlcmd.exe. La siguiente línea de comandos se conecta a MyServer, usa la base de datos predeterminada, usa una conexión de confianza, introduce MyScript.sql y emite MyResult.txt.
sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt