Мне было интересно, есть ли способ добавить имена столбцов в мои скалярные функции CLR на Sql Server. Я имею в виду, что после выполнения моего запроса я хотел бы увидеть столбец с результатом этой функции, уже названной с чем-то обычным, а не (No column name)
.sql server CLR скалярная функция с именем столбца по умолчанию
Я знаю, что часто функции объединены вместе, или я бы назвал их чем-то другим по другой причине, но все же - когда вы пишете запрос с 30 столбцами, не имея возможности пробивать псевдоним для 20 из них было бы здорово.
Значит, кто-нибудь знает хак, который позволит это?
Также было бы хорошо иметь эту функцию через некоторую добавку в SSMS (например, строить псевдонимы фиктивных элементов из функций и столбцов, используемых в расчете, например, «датированный_стартдайт_ендат»). Я попытался найти готовое решение для этого, но без эффекта. Любые намеки?
Редактировать: Некоторые люди спрашивали меня о примере кода. Я не думаю, что это помогло бы много, но здесь это:
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:
Возможно, конкретный пример поможет получить некоторые ответы: можете ли вы показать минимальный пример кода? [Примеры] (http://msdn.microsoft.com/en-us/library/ms131103.aspx) в MSDN предполагают, что функции CLR (или могут) предоставлять имена столбцов в своих наборах результатов. – Pondlife
Вы можете добавить имена столбцов для табличных функций, но это не то, что я имею в виду. Я хочу предоставить имя столбца для скалярных функций. Но спасибо за ваш комментарий. –
ОК, так как вы никогда не использовали слово «скаляр», что не было очевидно, хотя, насколько я знаю, скалярные функции никогда не имеют псевдонимов столбцов в SQL Server. В конце концов, они не возвращают столбцы. Но я редактировал заголовок и теги вопросов, чтобы надеяться сделать вопрос более ясным и получить несколько лучших ответов. – Pondlife