【问题标题】:Dynamic Table from stored procedure来自存储过程的动态表
【发布时间】:2014-03-12 18:29:59
【问题描述】:
我正在尝试从存储过程创建一个临时表,from this link
在字符串中他定义了 sql server 版本。从 2005 年到 2012 年,我们的客户拥有不同类型的 sql 服务器。
字符串:'SQLNCLI', 'Server=(local)\SQL2008;Trusted_Connection=yes;','EXEC getBusinessLineHistory'
如何独立于 sql server 平台使用该命令
【问题讨论】:
标签:
sql
sql-server
select
stored-procedures
【解决方案1】:
OPENROWSET 创建一个到远程服务器的动态链接。
http://technet.microsoft.com/en-us/library/ms190312.aspx
您可以通过更改参数创建对动态链接的动态 TSQL 调用。下面是示例代码。这可以转换为带有 @my_Server 作为参数传递的存储过程。
请注意,这不支持同时调用多个,因为只有一个表存在。
您不能使用本地临时表,因为 EXEC 在存储过程中调用 sp_executesql 可能存在范围问题。
这些是你需要研究的。
-- Set the server info
DECLARE @my_Server SYSNAME;
SET @my_Server = 'Server=(local)\SQL2008';
-- Clear the staging table
truncate table STAGE.dbo.MYTABLE;
-- Allow for dynamic server location
DECLARE @my_TSQL NVARCHAR(2048);
SET @my_TSQL =
'INSERT INTO STAGE.dbo.MYTABLE SELECT * FROM OPENROWSET(''SQLNCLI'',' + @my_TSQL +
';Trusted_Connection=yes;'', ''EXEC usp_My_Stored_Procedure'')';
-- Run the dynamic remote TSQL
exec sp_executesql @my_TSQL;