Создайте связанный loopback-сервер с локальным экземпляром, чтобы обеспечить доступ к данным. Допустим, у вас есть локальный именованный экземпляр под названием YourServer\SQL2008
:
USE [master];
GO
EXEC sp_addlinkedserver
@server = N'LoopbackLocal',
@srvproduct = N'',
@provider = N'SQLNCLI',
@datasrc = N'.\SQL2008',
@catalog = N'tempdb';
GO
EXEC sp_serveroption
@server = N'LoopbackLocal',
@optname = N'collation compatible',
@optvalue = N'true';
GO
EXEC sp_serveroption
@server = N'LoopbackLocal',
@optname = N'data access',
@optvalue = N'true';
GO
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'LoopbackLocal',
@locallogin = NULL ,
@useself = N'True';
GO
-- you may need to configure other security here
Затем вы можете использовать OPENQUERY
для запуска хранимой процедуры, как если бы это был специальный запрос.
SELECT COUNT(*)
FROM OPENQUERY
(
LoopbackLocal,
'EXEC dbo.my_sp'
) AS y;
Теперь, если dbo.my_sp
отвалов информации в таблицу #temp первых, вы будете не иметь проблемы, так как он больше не является блоком кода, который может обрабатывать OPENQUERY
. Например, если вы попытаетесь выполнить sp_who2
таким образом, по крайней мере, в SQL Server 2012 вы получите сообщение об ошибке sp_describe_first_result_set
, которое OPENQUERY
было изменено для использования (так что, возможно, это работает для вас сейчас, у меня нет теста 2008 года , но это будет проблемой, когда-нибудь):
Msg 11526, уровень 16, состояние 1, процедура sp_describe_first_result_set, строка 1
метаданные не могут быть определены, потому что ... использует временную таблицу.
Если вы собираетесь делать это много, почему бы не сделать специализированные хранимые процедуры (или добавить параметры к ним), чтобы возвращался только счет?
Это работает для меня. Но теперь каждый вызов 'exec' фактически возвращает данные, которых раньше не было. Я использую 'EXEC dbo.my_sp1' ' SET @ value1 = (SELECT @@ ROWCOUNT) ' ' EXEC dbo.my_sp2' 'SET @ значение2 = (SELECT @@ ROWCOUNT)' ' ВЫБРАТЬ @ value1, @ value2' Я хочу только два значения, а не значения из' exec' – AToya
Что конечный результат хранимой процедуры ? Используете ли вы возвращаемые данные? –
Он возвращает строки данных, которые мне нужны для других целей. И на данный момент, я хочу подсчитать, сколько строк возвращается – AToya