我有一个存储过程 dbo.someprocedure,它将输入作为 sql 查询并返回 Html 表格式。
Exec someprocedure 'Select * from dbo.Table'
这个 html 我想插入到一个表或一个变量中,以便我可以对结果 html 执行一些更改。
我尝试使用
Declare @variable varchar(max)
Exec @variable = someprocedure 'Select * from dbo.Table'
它正在执行但返回 0 变量未分配。
提前致谢,正在寻找您的答案。
我找到了一种替代程序,它符合我的目的。
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] 删除。
我来说两句