Лучший способ / практика для создания нескольких наборов результатов в хранимой процедуре на разных вкладках в Excel

#sql-server #excel #tsql #stored-procedures

#sql-server #excel #tsql #хранимые процедуры

Вопрос:

Я хочу вызвать хранимую процедуру на SQL Server через Excel. Причина, по которой я использую Excel, заключается в том, что пользователи вводят значения, которые передаются в качестве параметров хранимой процедуре и выполняются для возврата результирующих наборов данных на новой вкладке данных. Однако хранимая процедура содержит около 6-7 операторов select, ответственных за создание 6-7 наборов результатов. Помимо создания отдельных хранимых процедур для каждого набора результатов, что невозможно, поскольку оно своевременное, а наборы результатов основаны друг на друге, каков наилучший способ справиться с этим или изучить решение? Это то, что мне нужно встроить в логику хранимой процедуры или что-то, что я могу настроить в Excel?

Моя хранимая процедура будет выглядеть примерно так, чтобы дать вам представление

 CREATE PROCEDURE Test

AS
BEGIN

SET NOCOUNT ON;

SELECT TOP 10 PersonType,NameStyle,Title 
  FROM [AdventureWorks2016CTP3].[Person].[Person]

SELECT  TOP 10 PersonType,Firstname,Lastname
  FROM [AdventureWorks2016CTP3].[Person].[Person_json]

SELECT ****
.
.
.
SELECT ****
END
GO

 

Комментарии:

1. Примечание: вы не должны использовать sp_ префикс для своих хранимых процедур. Microsoft зарезервировала этот префикс для собственного использования (см. Раздел Именование хранимых процедур ) , и вы рискуете столкнуться с конфликтом имен в будущем. Это также плохо сказывается на производительности вашей хранимой процедуры . Лучше просто избегать sp_ и использовать что-то другое в качестве префикса — или вообще без префикса!

2. Понятно — я на самом деле просто использовал его в демонстрационных целях, но спасибо за полезную информацию

Ответ №1:

В хранимой процедуре присваивайте одинаковые имена столбцов всем операторам select и используйте UNION между ними, а затем добавляйте дополнительный столбец к каждому оператору select, чтобы определить, из какой таблицы поступают данные, в идеале используйте имя таблицы.

Затем вызовите хранимую процедуру на главной вкладке один раз, а затем ссылайтесь на эти данные на другие вкладки и фильтруйте их.

Комментарии:

1. Это работает, когда каждая таблица имеет одинаковое количество столбцов, но для меня это не относится ко всем результирующим наборам данных

2. В этом случае добавьте новые столбцы с нулевыми значениями в инструкции select с меньшим количеством строк. например: SELECT GETDATE() AS [Today] , NULL AS [Yesterday] Union ALL SELECT GETDATE() AS [Today] , GETDATE()-1 AS [Yesterday] from Table1