#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