этот SQL Server? Разве Вы не могли записать хранимую процедуру TSQL что циклы через и объединения результаты вместе?
мне также интересно, если существует способ только для SQL сделать это все же. От битов я помню от своего географического класса баз данных, должно быть.
Да, это так. Вы можете проверить это, используя ildasm
или Reflector для проверки кода.
static void Main(string[] args) {
string s = "A" + "B";
Console.WriteLine(s);
}
транслируется в
.method private hidebysig static void Main(string[] args) cil managed {
.entrypoint
// Code size 17 (0x11)
.maxstack 1
.locals init ([0] string s)
IL_0000: nop
IL_0001: ldstr "AB" // note that "A" + "B" is concatenated to "AB"
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: call void [mscorlib]System.Console::WriteLine(string)
IL_000d: nop
IL_000e: br.s IL_0010
IL_0010: ret
} // end of method Program::Main
Есть кое-что еще более интересное, но связанное с этим. Если у вас есть строковый литерал в сборке, CLR создаст только один объект для всех экземпляров того же литерала в сборке.
Таким образом:
static void Main(string[] args) {
string s = "A" + "B";
string t = "A" + "B";
Console.WriteLine(Object.ReferenceEquals(s, t)); // prints true!
}
напечатает на консоли «True»! Эта оптимизация называется интернированием строк .
Согласно Reflector :
Console.WriteLine("ABCDEF");
Console.WriteLine("ABCDEF");
Console.WriteLine("ABCDEF");
даже в конфигурации отладки.