我有一个执行动态构建的字符串的存储过程。
它将来自另一台无法控制的服务器上不断变化的架构中的几个select语句联合起来(因此是动态字符串)。我希望能够从视图中访问此过程的结果,但这是我遇到的问题。
我创建了一个存储过程(下面的代码),它将我的结果输出到一个表,但我希望能够执行连接等,所以如果有一些方法将它包装到视图中会非常方便 - 我正在考虑一个表值函数,但我还没有弄清楚如何将动态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
答案 0 :(得分:0)
您是否可以让SQL代理定期执行此操作并将结果转储到数据库中的另一个表/一组表中?
然后你可以在任何你想要的查询中将它用作直接连接。