使用嵌入式 TSQL 可执行文件字符串生成 SSRS 报告的输出参数



我正在使用SQL Server 2012和SSRS。 使用这个非常有用的答案,我有一个参数化查询,它通过 openquery 从 DB2 系统中提取数据。 我想把它做成一份 SSRS 报告。 我不知道如何使用查询来做到这一点,所以我构建了一个小存储过程来包装查询,如下所示:

ALTER PROCEDURE dbo.QueryInfoByID
-- Add the parameters for the stored procedure here
@inputid varchar(10),
@outputfield varchar(50) output
AS
BEGIN
DECLARE @TSQL varchar(8000);
SELECT  @TSQL = 'SELECT * FROM OPENQUERY(IMG2677,''SELECT outputfield FROM mytable WHERE outputfield = ''''' + @inputid + ''''''')'
EXEC (@TSQL)
END

如何将@TSQL中嵌入的输出字段与 SP 输出参数列表中的@outputfield连接起来? 我尝试了一些谷歌搜索,但找不到任何解决此问题的内容。 如果这是一个新手问题,请道歉;我没有对存储过程中的输出参数做太多工作。

我相信您只需要更改动态查询即可考虑参数。

ALTER PROCEDURE dbo.QueryInfoByID
-- Add the parameters for the stored procedure here
@inputid varchar(10),
@outputfield varchar(50) output
AS
BEGIN
DECLARE @TSQL varchar(8000);
SELECT  @TSQL = 'SELECT * FROM OPENQUERY(IMG2677,''SELECT '''' + @outputfield + '''' FROM mytable WHERE '''' + @outputfield + ''''= ''''' + @inputid + ''''''')'
EXEC (@TSQL)
END

没有理由不能只执行在交互性运行时使用的相同查询。您甚至不需要存储的过程来执行此操作。但是,SSRS 帐户可能没有执行命令的访问权限。

我过去曾通过创建新的SQL Server登录名,授予正确的权限并使用该帐户执行SQL语句来执行此操作(我实际上开始授予它完全访问权限以证明它有效,然后删除了不必要的访问权限(。

例如,我创建了一个名为AceDriverLogin的登录名,我在直接在服务器上访问Excel文件时使用。

然后构建您的 SQL 语句(在您的情况下,您在 @TSQL 中完成了此操作(。然后使用以下语法执行该语句。

EXEC (@TSQL) AS LOGIN= 'AceDriverLogin'

最新更新