将存储过程的 Html 输出到表或变量中

Yuvrajt27

我有一个存储过程 dbo.someprocedure,它将输入作为 sql 查询并返回 Html 表格式。

Exec someprocedure 'Select * from dbo.Table'

这个 html 我想插入到一个表或一个变量中,以便我可以对结果 html 执行一些更改。

我尝试使用

Declare @variable varchar(max)
Exec @variable = someprocedure 'Select * from dbo.Table' 

它正在执行但返回 0 变量未分配。

提前致谢,正在寻找您的答案。

Yuvrajt27

我找到了一种替代程序,它符合我的目的。

CREATE PROC [dbo].[spQueryToHtmlTable] 
(
  @query nvarchar(MAX), 
  @orderBy nvarchar(MAX) = NULL, 
  @html nvarchar(MAX) = NULL OUTPUT 
)
AS
BEGIN   
  SET NOCOUNT ON;

  IF @orderBy IS NULL BEGIN
    SET @orderBy = ''  
  END

  SET @orderBy = REPLACE(@orderBy, '''', '''''');

  DECLARE @realQuery nvarchar(MAX) = '
    DECLARE @headerRow nvarchar(MAX);
    DECLARE @cols nvarchar(MAX);    

    SELECT * INTO #dynSql FROM (' + @query + ') sub;

    SELECT @cols = COALESCE(@cols + '', '''''''', '', '''') + ''['' + name + ''] AS ''''td''''''
    FROM tempdb.sys.columns 
    WHERE object_id = object_id(''tempdb..#dynSql'')
    ORDER BY column_id;

    SET @cols = ''SET @html = CAST(( SELECT '' + @cols + '' FROM #dynSql ' + @orderBy + ' FOR XML PATH(''''tr''''), ELEMENTS XSINIL) AS nvarchar(max))''    

    EXEC sys.sp_executesql @cols, N''@html nvarchar(MAX) OUTPUT'', @html=@html OUTPUT

    SELECT @headerRow = COALESCE(@headerRow + '''', '''') + ''<th>'' + name + ''</th>'' 
    FROM tempdb.sys.columns 
    WHERE object_id = object_id(''tempdb..#dynSql'')
    ORDER BY column_id;

    SET @headerRow = ''<tr>'' + @headerRow + ''</tr>'';

    SET @html = ''<table border="1">'' + @headerRow + @html + ''</table>'';    
    ';

  EXEC sys.sp_executesql @realQuery, N'@html nvarchar(MAX) OUTPUT', @html=@html OUTPUT
END
GO

DECLARE @html nvarchar(MAX);
EXEC spQueryToHtmlTable @html = @html OUTPUT,  @query = N'SELECT * FROM sometable';

@html 包含 html 输出,以便您可以对 html 重新格式化执行操作

例子:

select @htmlTable = Concat('<html>
<style>
table {
border-collapse: collapse;
width: 50%;
}
td, th {
border: 1px solid #B8B8B8;
text-align: left;
padding: 8px;
}
thead {
color:white;
}
</style>
<body>
<table>
<tr>
   <th bgcolor="#B8B8B8">col1</th>
   <th bgcolor="#B8B8B8">col2</th> 
   <th bgcolor="#B8B8B8">col3</th>
</tr>',substring(@html,charindex('</tr>',@html,1)+5,len(@html)),'</body></html>')

感谢您的回答。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章