T-SQLを介してこれを実行できるとは思いませんが、C#で記述されたUDFを介して同じことを実行することは絶対に可能です。コードは次のとおりです。
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions {
[Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
public static SqlString fn_HearingAttendeesToCSV(SqlString tableName, SqlString columnName) {
System.Text.StringBuilder result = null;
using (var cnn = new SqlConnection("context connection=true")) {
var cmd = new SqlCommand();
cmd.CommandText = String.Format("select [{0}] from [{1}]", SqlEscape(columnName.Value), SqlEscape(tableName.Value));
cmd.Connection = cnn;
cnn.Open();
using (var rdr = cmd.ExecuteReader()) {
while (rdr.Read()) {
if (result == null) {
result = new System.Text.StringBuilder();
}
else {
result.Append(",");
}
result.Append(CsvEscape(rdr[0]));
}
}
cnn.Close();
}
if (result == null) {
return SqlString.Null;
}
else {
return result.ToString();
}
}
private static string SqlEscape(string s) {
s = s ?? "";
return s.Replace("[", "[[").Replace("]", "]]");
}
private static string CsvEscape(object o) {
var s = o == null ? "" : o.ToString();
return "\"" + s.Replace("\"", "\"\"") + "\"";
}
};
CLR UDFを使用するには、次のようにサーバーでCLRUDFが有効になっていることを確認する必要があります。
exec sp_configure 'clr enabled', 1
RECONFIGURE
また、SQL 2005では4.0アセンブリが許可されていないため、古いバージョンの.NET Framework(2.0は私がテストしたものです)にコンパイルする必要があります。
UDFはC#で記述されていますが、これまでと同じ方法でT-SQLを介してUDFにアクセスできます。
select fn_HearingAttendeesToCSV('table', 'column')
'dbo'以外のスキーマをサポートする必要がある場合、または純粋なCSVが必要ない場合は、ニーズに合わせて変更しますが、99%の方法でそこに到達するはずです。つまり、あなたがDBAであるか、CLRを有効にするのに十分な仲間であると仮定します。