sql-server - pipes - vs shell installation has failed with exit code 1638



SQL Server: impossibile trovare il tipo nell'assembly (1)

Si assuma la DLL di assemblaggio:

using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System;
using System.Text;

namespace CLRFunctions
{
    public class T
    {
        [SqlFunction(DataAccess = DataAccessKind.Read)]
        public static String NormalizeString(String s, String normalizationForm)
        {
            NormalizationForm form = NormalizationForm.FormC;

            if (String.Equals(f, "FormD", StringComparison.OrdinalIgnoreCase))
                form = NormalizationForm.FormD;

            return = s.Normalize(form);
        }
    }
}

Nota : indirizzare l'assembly su .NET 3.5 poiché SQL Server non supporta .NET 4.0

Copia l'assembly in una posizione e "creando" l'assembly funziona correttamente:

CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';

Nota: quindi abilitare le funzioni CLR, altrimenti vengono broken by default :

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

Creata la funzione definita dall'utente non riesce:

CREATE FUNCTION NormalizeString(@s nvarchar(max), @normalizationForm varchar(50)) 
RETURNS nvarchar(max)
AS EXTERNAL NAME CLRFunctions.T.NormalizeString

fallisce con errore:

Msg 6505, Level 16, State 2, Procedure NormalizeString, Line 1
Could not find Type 'T' in assembly 'CLRFunctions'.

Perché SQL Server non trova il tipo T nelle CLRFunctions assembly?

Nota : perché T ? Perché Microsoft ha fatto.


Provare

CREATE FUNCTION NormalizeString(@s nvarchar(max), 
                                @normalizationForm nvarchar(50)) 
RETURNS nvarchar(max)
AS EXTERNAL NAME CLRFunctions.[CLRFunctions.T].NormalizeString




sqlclr