Ich frage mich, ob es eine Möglichkeit gibt, meinen CLR-Skalarfunktionen in Sql Server Spaltennamen hinzuzufügen. Ich meine, dass nachdem ich meine Abfrage ausgeführt habe, würde ich gerne eine Spalte mit einem Ergebnis dieser Funktion bereits mit etwas benutzerdefinierten anstelle von (No column name)
benannt sehen.sql server CLR-Skalarfunktion mit Standardspaltenname
Ich weiß, dass Funktionen oft kombiniert werden, oder ich müsste sie aus anderen Gründen etwas anders benennen, aber immer noch - wenn Sie eine Abfrage mit 30 Spalten schreiben, müssen Sie nicht für 20 von ihnen einen Alias eingeben wäre nett.
Also weiß jemand einen Hack, der dies ermöglichen würde?
Es wäre auch schön, diese Funktion über ein Add-In in SSMS zu haben (z. B. Erstellen von Dummy-Aliasen aus Funktionen und Spalten, die bei der Berechnung verwendet werden, wie "datediff_startdate_enddate"). Ich habe versucht, dafür eine fertige Lösung zu finden, aber ohne Erfolg. Irgendwelche Hinweise?
Bearbeiten: Einige Leute fragte mich nach Codebeispiel. Ich glaube nicht, das viel helfen würde, aber hier ist es:
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
Und das ist mein Wunsch-to-be-möglich Aufruf dieser Funktion in T-SQL und erwartetes Ergebnis:
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
Ergebnis hat bereits einen Spaltennamen, ohne die Notwendigkeit, alias in T-SQL hinzuzufügen:
Vielleicht würde ein bestimmtes Beispiel helfen, einige Antworten zu bekommen: Können Sie ein minimales Beispiel für Code zeigen? Die [Beispiele] (http://msdn.microsoft.com/en-us/library/ms131103.aspx) in MSDN schlagen vor, dass CLR-Funktionen Spaltennamen in ihren Resultsets bereitstellen (oder können). – Pondlife
Sie können Spaltennamen für Tabellenfunktionen hinzufügen, aber das ist nicht was ich meine. Ich möchte den Spaltennamen für Skalarfunktionen angeben. Aber danke für deinen Kommentar. –
OK, da Sie nie das Wort "Skalar" verwendet haben, das nicht offensichtlich war, obwohl, soweit ich weiß, skalare Funktionen niemals Spaltenaliase in SQL Server haben. Sie geben schließlich keine Spalten zurück. Aber ich habe Ihren Fragetitel und die Tags bearbeitet, um die Frage hoffentlich klarer zu machen und bessere Antworten zu erhalten. – Pondlife