Ответ 1
Если вы хотите просто получить метаданные набора результатов без какой-либо фактической строки, используйте SET FMTONLY ON
.
Я заинтересован в возврате пустого набора результатов из хранимых процедур SQL Server в определенных событиях.
Предполагаемое поведение заключается в том, что L2SQL DataContext.SPName().SingleOrDefault()
приведет к нулевому значению CLR.
В настоящее время я использую следующее решение, но я не уверен, будет ли это считаться плохой практикой, угрозой производительности (я не смог найти ее, прочитав план выполнения), или если есть просто лучший способ:
SELECT * FROM [dbo].[TableName]
WHERE 0 = 1;
План выполнения - это постоянное сканирование с тривиальной стоимостью, связанной с ним.
Причина, по которой я спрашиваю об этом, а не просто без каких-либо SELECT, связана с тем, что предыдущие инструкции SELECT @scalar или SELECT INTO могли привести к тому, что непреднамеренные результирующие наборы будут возвращены в L2SQL. Я ничего не переживаю?
Если вы хотите просто получить метаданные набора результатов без какой-либо фактической строки, используйте SET FMTONLY ON
.
Если вам нужны имена столбцов в ответе, перейдите к select TOP 0
из этой таблицы, иначе просто используйте SELECT TOP 0 NULL
. Он должен работать довольно быстро:)
Это разумный подход. Другой вариант:
SELECT TOP 0 * FROM [dbo].[TableName]
Это вполне разумный подход.
Чтобы облегчить любые проблемы с производительностью (у кого вы не должны иметь в первую очередь - сервера достаточно умного, чтобы избежать сканирования таблицы на 1 = 0), выберите таблицу, которая очень мала и не используется в значительной степени - я убедитесь, что ваша схема DB имеет один.
Я думаю, что лучшим решением является top 0, но не используется фиктивная таблица. Это делает это для меня
select top 0 null как column1, null как column2.
Используя, например, системная таблица может быть хорошей для производительности, но выглядит нечистой.