У меня есть хранимая процедура, которая выполняет динамически построенную строку.Просмотреть результаты хранимой процедуры
Он объединяет несколько операторов выбора из постоянно меняющейся схемы на другом сервере, в котором я не контролирую (следовательно, динамическую строку). Я хочу иметь доступ к результатам этой процедуры из представления, но это то, где я застреваю.
Я создал хранимую процедуру (код ниже), которая выводит мои результаты в таблицу, но я хочу иметь возможность выполнять объединения и т. Д., Поэтому было бы очень удобно, если бы какой-то способ обернуть это в представление - Я думаю, что функция, ориентированная на таблицу, но я не совсем понял, как получить динамический SQL в функцию ... любая помощь приветствуется!
CREATE PROCEDURE [dbo].[usp_test]
AS
SET NOCOUNT ON;
DECLARE @sql VARCHAR(MAX)
SELECT @sql = ISNULL(@sql+'
','')+'SELECT TOP (900) *
FROM OPENQUERY(Linked_Server,
'SELECT col1, col2, col3
FROM dbo.'+ tableName+'
+'
UNION' FROM dbo.ls_views
--dbo.ls_views is a view with the pertinent views/table names from the other server.
Set @sql = @sql+ '
Select top (0) ''1'', ''2'',''3'' from sys.tables '
--last select statement is to end multiple unions... not sure if there is a better way, but this works.
--PRINT (@sql);
--EXEC (@sql);
EXECUTE sp_Executesql @sql
GO
Примечание: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –
Марк, ты прав. Я получил спешку, заменяя мой код «фиктивным» кодом. – CD4
Поскольку вы уже используете связанные серверы, вы можете получить результаты с помощью OPENQUERY при выполнении хранимой процедуры: 'SELECT * FROM OPENQUERY (Linked_Server, 'EXEC [dbo]. [Usp_test]')' –