我有一个包含2列QueryName
和Query
的表格。我正在尝试执行存储在表的Query
列中的查询。
我想要显示超过记录数为零的任何内容,我们需要使用queryname
和count
打印到输出。我使用以下光标,我能够显示rowcount
,但有人请建议我如何显示QueryName
:
DECLARE @Sql NVARCHAR(MAX);
DECLARE Cur CURSOR LOCAL FAST_FORWARD FOR
(SELECT Query
FROM VWLetterTYB )
OPEN Cur
FETCH NEXT FROM Cur INTO @Sql
WHILE (@@FETCH_STATUS = 0)
BEGIN
--Exec sp_executesql @Sql
EXEC ('SELECT COUNT(*) AS Rowcounts FROM (' + @sql + ') AS t HAVING COUNT(*) > 0 ')
FETCH NEXT FROM Cur INTO @Sql
END
CLOSE Cur
DEALLOCATE Cur;
答案 0 :(得分:0)
--outfile
答案 1 :(得分:0)
如果我理解正确,你在表中有两个字段,但你只能使用光标获得一个字段。在这种情况下,解决方案很简单,您可以使用游标(每个值到不同的变量)获取多个值,然后将该值放在动态SELECT
中:
DECLARE @Sql NVARCHAR(MAX), @QueryName NVARCHAR(MAX);
DECLARE Cur CURSOR LOCAL FAST_FORWARD FOR
(SELECT Query, QueryName
FROM VWLetterTYB )
OPEN Cur
-- variables are filled in the order used in the SELECT (first column to first variable,
-- second column to second variable, etc.)
FETCH NEXT FROM Cur INTO @Sql, @QueryName
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- when using single quotes inside a string you have to double it
EXEC ('SELECT '''+ @QueryName+''' AS QueryName, COUNT(*) AS Rowcounts FROM (' + @sql + ') AS t HAVING COUNT(*) > 0 ')
FETCH NEXT FROM Cur INTO @Sql, @QueryName
END
CLOSE Cur
DEALLOCATE Cur;
答案 2 :(得分:0)
我没有答案,但对问题进一步完善。这里的示例使用存储的SQL作为独立命令。存储在表格列中的SQL片段是否可以用作SELECT列表中的项目?
我有一种情况,我有一个代码/名称查找对的表。大多数代码都会生成一个名称。但是需要应用一些逻辑来确定名称。我希望在我的主SQL语句中实现这一点。我必须在许多脚本中从同一个查找表中应用此逻辑。我不想在每个脚本中嵌入复杂的逻辑或维护一个复杂的存储过程。