Подтвердить что ты не робот

Как вернуть пустой набор результатов из процедуры с использованием T-SQL?

Я заинтересован в возврате пустого набора результатов из хранимых процедур SQL Server в определенных событиях.

Предполагаемое поведение заключается в том, что L2SQL DataContext.SPName().SingleOrDefault() приведет к нулевому значению CLR.

В настоящее время я использую следующее решение, но я не уверен, будет ли это считаться плохой практикой, угрозой производительности (я не смог найти ее, прочитав план выполнения), или если есть просто лучший способ:

SELECT * FROM [dbo].[TableName]
WHERE 0 = 1;

План выполнения - это постоянное сканирование с тривиальной стоимостью, связанной с ним.

Причина, по которой я спрашиваю об этом, а не просто без каких-либо SELECT, связана с тем, что предыдущие инструкции SELECT @scalar или SELECT INTO могли привести к тому, что непреднамеренные результирующие наборы будут возвращены в L2SQL. Я ничего не переживаю?

4b9b3361

Ответ 1

Если вы хотите просто получить метаданные набора результатов без какой-либо фактической строки, используйте SET FMTONLY ON.

Ответ 2

Если вам нужны имена столбцов в ответе, перейдите к select TOP 0 из этой таблицы, иначе просто используйте SELECT TOP 0 NULL. Он должен работать довольно быстро:)

Ответ 3

Это разумный подход. Другой вариант:

SELECT TOP 0 * FROM [dbo].[TableName]

Ответ 4

Это вполне разумный подход.

Чтобы облегчить любые проблемы с производительностью (у кого вы не должны иметь в первую очередь - сервера достаточно умного, чтобы избежать сканирования таблицы на 1 = 0), выберите таблицу, которая очень мала и не используется в значительной степени - я убедитесь, что ваша схема DB имеет один.

Ответ 5

Я думаю, что лучшим решением является top 0, но не используется фиктивная таблица. Это делает это для меня

select top 0 null как column1, null как column2.

Используя, например, системная таблица может быть хорошей для производительности, но выглядит нечистой.