存储过程的动态表

时间:2014-03-12 18:30:00

标签: sql sql-server select stored-procedures

我尝试使用存储过程创建临时表from this link

在字符串中,他定义了sql server版本。从2005年到2012年,我们的客户拥有不同类型的sql服务器。

字符串:' SQLNCLI','服务器=(本地)\ SQL2008; Trusted_Connection = yes;',' EXEC getBusinessLineHistory'

如何独立于sql server plataform

使用该命令

1 个答案:

答案 0 :(得分:0)

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;