Sql Server の CLR スカラー関数に列名を追加する方法があるかどうか疑問に思っていました。つまり、クエリを実行した後、この関数の結果を含む列を表示したいということです(No column name)
。
多くの場合、関数は一緒に組み合わされたり、他の理由で別の名前を付けたりする必要があることは知っていますが、それでも、30 列のクエリを作成するときに、20 列のエイリアスを入力する必要がないのはいいことです。
それで、これを可能にするハックを知っている人はいますか?
また、SSMS のアドインを使用してこの機能を使用することもできます (たとえば、「datediff_startdate_enddate」のように、計算で使用される関数と列からダミーのエイリアスを作成します)。これに対するすぐれた解決策を見つけようとしましたが、効果はありませんでした。ヒントはありますか?
編集: コード例について尋ねられた人もいました。あまり参考にならないと思いますが、以下です。
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
そして、これは T-SQL でのこの関数の可能な限りの呼び出しと期待される結果です。
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
結果には、T-SQL でエイリアスを追加する必要なく、既に列名があります。