首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server : openrowset问题

Server : openrowset问题
EN

Database Administration用户
提问于 2013-09-17 11:28:52
回答 1查看 2.3K关注 0票数 -1

我正在寻找一个不用执行的变量使用openrowset的解决方案,这样我可以在表函数中使用它。

我知道openrowset不接受'+‘,我不能调用exec()来创建动态调用。

我在找类似的东西

代码语言:javascript
复制
SELECT * 
FROM OPENROWSET(
         'SQLOLEDB', 
         'DRIVER={SQL Server};SERVER=(local);Trusted_Connection=yes', 
         @sql
     ) 
EN

回答 1

Database Administration用户

发布于 2013-09-17 19:18:24

开环不接受参数。如果要在参数中使用OPENROWSET,则需要使用动态to。

代码语言:javascript
复制
SET NOCOUNT ON 
DECLARE @SQLString nvarchar(max), 
        @Server nvarchar(max), 
        @Parms nvarchar(500), 
        @filter int, 
        @int int, 
        @string nvarchar(500) 
--  build servername, with instancename as appropriate 
SET @Server = CAST(SERVERPROPERTY('MachineName') AS nvarchar(128)) +  
                CASE CAST(SERVERPROPERTY('InstanceName') AS nvarchar(128)) 
                    WHEN NULL THEN '' 
                    ELSE N'\' + CAST(SERVERPROPERTY('InstanceName') AS nvarchar(128))  
                END 

--  Example 1: parameterized call to sp_who using sp_executesql 
SET @SQLString = N' 
SELECT  * 
FROM    OPENROWSET (''SQLOLEDB'',''Server=' + @Server + ';TRUSTED_CONNECTION=YES;'',''set fmtonly off exec master.dbo.sp_who'') 
AS tbl 
WHERE spid = @filter' 

SET @Parms = N'@filter int' 

--  Example 1a: return results for spid = 1 
SET @int = 1 
EXEC sp_executesql @SQLString, @Parms, @filter = @int 

--  Example 1b: return results for spid = 7 
SET @int = 7 
EXEC sp_executesql @SQLString, @Parms, @filter = @int 

--  Example 1c: return results for current spid 
SET @int = @@spid 
EXEC sp_executesql @SQLString, @Parms, @filter = @int 

--  this is all well and good, 
--  but we didn't pass a parameter to the stored procedures, 
--  we just filtered the results 

--  Example 2: parameterized calls to sp_who using sp_executesql and exec

--  Example 2a: return results for spid = 1 
SET @string = '1' 
SET @SQLString = N' 
SELECT  * 
FROM    OPENROWSET (''SQLOLEDB'',''Server=' + @Server + ';TRUSTED_CONNECTION=YES;'',''set fmtonly off exec master.dbo.sp_who ' + @string + ''') 
AS tbl' 
EXEC sp_executesql @SQLString 
EXEC (@SQLString) 

--  Example 2b: return results for current spid 
SET @string = CAST(@@spid as nvarchar(5)) 
SET @SQLString = N' 
SELECT  * 
FROM    OPENROWSET (''SQLOLEDB'',''Server=' + @Server + ';TRUSTED_CONNECTION=YES;'',''set fmtonly off exec master.dbo.sp_who ' + @string + ''') 
AS tbl' 
EXEC sp_executesql @SQLString 
EXEC (@SQLString) 
GO

参考资料:OPENROWSET技巧,重获成功

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/50048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档