Может быть более-толкая пудинг для вашего требования, но агрегат CLR функция конкатенации строк в отдельные значения - очень удобная вещь для вашего инструментария. Что-то вроде ниже. В моем опыте работает намного быстрее, чем xml, и поддерживает GROUP BY и т. Д., Так что он достаточно мощный. Работает только в SQL2k8 или выше и взорвется, если конкатенирует строку до 2 ГБ.
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize = -1)]
public struct Concatenate : IBinarySerialize
{
public string concat;
public string delimiter;
public void Init()
{
this.concat = "";
}
public void Accumulate(SqlString text, SqlString delim)
{
if (!text.IsNull)
{
concat += (string)text + (string)delim;
}
delimiter = (string)delim;
}
public void Merge(Concatenate Group)
{
concat += (string)Group.concat + (string)Group.delimiter;
delimiter = (string)Group.delimiter;
}
public SqlString Terminate()
{
return concat.Substring(0, concat.Length - delimiter.Length);
}
public void Read(BinaryReader r)
{
delimiter = r.ReadString();
concat = r.ReadString();
}
public void Write(BinaryWriter w)
{
w.Write(delimiter);
w.Write(concat);
}
}
Это результаты, которые вы хотите от запроса, или окончательных данных вы хотите работать. Я не уверен, что вы можете просто добавить каждое имя в одно поле, и я сомневаюсь, что он вернет одну строку с кратным одним и тем же полем (например, имя, имя, имя) ... какова ваша цель для этих данных. – Silvertiger
Требование - поддерживать некоторый старый шаблон. – James