Вы не можете получить ничего лучше.
В конце концов, любое решение должно будет прочитать весь файл, выяснить, сколько \n
у вас есть, и вернуть этот результат.
У вас есть лучший способ сделать это, не читая весь файл? Не уверен ... Лучшее решение всегда будет связано с I / O-привязкой, лучше всего это сделать, чтобы убедиться, что вы не используете ненужную память, но похоже, что у вас есть это.
Можно подумать, что нативные средства JSON в SQL Server были бы здесь более полезными, но не совсем - требуется некоторая неуклюжая конкатенация строк, и единственное, что нам действительно приносит пользу, - это нативное экранирование JSON. Это потому, что на самом деле нет удобного способа сопоставить столбцы в пары ключ / значение; только простые сопоставления столбца как ключа.
SELECT [UserID], JsonValue =
'{' + STRING_AGG(
'"' + STRING_ESCAPE([key], 'json') + '"' + ':' +
'"' + STRING_ESCAPE([value], 'json') + '"',
','
) + '}'
FROM UserProperty
GROUP BY UserID
Для этого требуется SQL Server 2017+; он также должен работать на Azure, так как это впереди кривой.