【发布时间】:2018-05-10 08:40:42
【问题描述】:
我有一个过程,我将临时表名作为参数传递。对于里面的每个数据集,我需要获取行数。如何做到这一点?
我需要类似的东西:
CREATE PROCEDURE sp_processing
@temp_table_name varchar(50)
AS
DECLARE @log varchar(max)
/* get list of keys inside temp_table_name */
/* just a pseudo-code example */
SET @l_cursor = CURSOR FOR
SELECT Key1, Key2, Key3, count(*)
FROM @temp_table_name -- table name passed as text
GROUP by Key1, Key2, Key3;
WHILE "there are results"
BEGIN
@log += @Key1 +', '+ @Key2 +', '+ @Key3 +', '+ @count + CHAR(13)+CHAR(10);
END
UPDATE log_table SET log_column = @log WHERE....;
END /* procedure */
有没有办法循环这个?
我知道我可以选择将结果提取到 table 类型和 THEN 循环,但这需要使用表类型,所以想知道如果没有表变量这是否可以实现。
编辑:我只需要打印每组键的计数。
【问题讨论】:
-
我不太明白您要做什么。如果您收到临时表名称作为参数,那么您将必须通过动态 SQL 访问它。为什么你需要一个光标呢?为什么需要循环?
-
其实你是对的,我不需要循环,因为我只需要在
varchar变量中打印计数,但我想我需要遍历记录:-( -
在问题中包含您的完整用例,这样我们就可以避免问答乒乓。
-
我发现这个解决方案非常简洁:*.com/questions/8005846/…
标签: sql-server loops tsql dynamic-sql dynamicquery