Zastanawiam się, czy istnieje sposób na dodanie nazw kolumn do moich funkcji skalarnych CLR w Sql Server. Mam na myśli to, że po uruchomieniu zapytania, chciałbym zobaczyć kolumnę z wynikiem tej funkcji o nazwie z czymś niestandardowym, zamiast z (No column name)
.funkcja skalarna CLR serwera SQL z domyślną nazwą kolumny
Wiem, że często funkcje są ze sobą łączone, inaczej musiałbym je nazwać inaczej z innych powodów, ale nadal - gdy piszesz zapytanie z 30 kolumnami, nie musisz uderzać w alias dla 20 z nich byłoby miło.
Czy ktoś zna hack, który by to umożliwił?
Byłoby także słodkie mieć tę funkcję przez dodanie jakiegoś dodatku w SSMS (np. Budowanie fałszywych aliasów z funkcji i kolumn używanych w obliczeniach, takich jak "datediff_startdate_enddate"). Próbowałem znaleźć na to rozwiązanie, ale bezskutecznie. Jakieś wskazówki?
Edytuj: Niektórzy ludzie pytali mnie o przykład kodu. Nie sądzę, że to pomoże dużo, ale tutaj jest:
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlTypes;
using System.Text.RegularExpressions;
namespace ClrFunctions
{
public class RegexFunctions
{
public static SqlBoolean clrIsMatch(SqlString strInput, SqlString strPattern)
{
if (strPattern.IsNull || strInput.IsNull)
{
return SqlBoolean.False;
}
return (SqlBoolean)Regex.IsMatch(strInput.Value, strPattern.Value, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
}
}
}
T-SQL:
Create Assembly ClrFunctions From 'C:\CLR\ClrFunctions.dll'
GO
Create Function dbo.clrIsMatch(
@strInput As nvarchar(4000),
@strPattern As nvarchar(255)
)
Returns Bit
As External Name [ClrFunctions].[ClrFunctions.RegexFunctions].[clrIsMatch]
GO
I to jest moje życzenie-to-be-możliwe wywołanie tej funkcji w T-SQL i oczekiwany wynik:
select
txt, dbo.clrIsMatch(txt,'[0-9]+')
from (
select 'some 123 text' as txt union all
select 'no numbers here' union all
select 'numbers 456 again'
) x
wynik ma już nazwę kolumny, bez konieczności dodawania aliasu w T-SQL:
Być może konkretny przykład może pomóc w uzyskaniu odpowiedzi: czy możesz pokazać minimalny przykład kodu? [Przykłady] (http://msdn.microsoft.com/en-us/library/ms131103.aspx) w MSDN sugerują, że funkcje CLR mogą (lub mogą) podawać nazwy kolumn w zestawach wyników. – Pondlife
Można dodawać nazwy kolumn dla funkcji o wartościach tabelarycznych, ale nie o to mi chodzi. Chcę podać nazwę kolumny dla funkcji skalarnych. Ale dziękuję za komentarz. –
OK, ponieważ nigdy nie używałeś słowa "skalar", które nie było oczywiste, chociaż o ile wiem, funkcje skalarne nigdy nie mają aliasów kolumn w SQL Server. W końcu nie zwracają kolumn. Ale zredagowałem twój tytuł pytania i tagi, aby mieć nadzieję, że pytanie będzie jaśniejsze i uzyskać lepsze odpowiedzi. – Pondlife