我正在将一些存储过程从SQL Server 2000更新到2008.在进行了必要的语法更改后,一切都运行良好,除了一个项目在2000年按需要工作,但在2008年没有。这里' sa大大简化了我的问题的可重复陈述。
我有一张包含以下数据的表格:
我使用以下存储过程来提取数据并计算聚合计数:
CREATE PROCEDURE proc1
AS
DECLARE @tablevar AS TABLE (
userid NCHAR(4),
foo NCHAR(2),
bar NCHAR(2),
total INT,
PRIMARY KEY (userid, foo, bar)
)
INSERT INTO @tablevar (userid, foo, bar)
SELECT DISTINCT t1.userid, t1.foo, t1.bar
FROM Table_1 t1
GROUP BY UserID, Foo, Bar
UPDATE @tablevar
SET total =
(SELECT COUNT(logid)
FROM Table_1 t1
WHERE t1.UserID = UserID and
t1.Foo = Foo and
t1.Bar = Bar)
SELECT * FROM @tablevar
RETURN
GO
这会产生以下结果:
使用SQL Server 2000时,total
列中的条目为[2,1,1,1],这是预期的结果。我假设我在这里错过了一些非常明显的东西,但我似乎无法将手指放在上面。
答案 0 :(得分:4)
由于您必须使用表变量,请按以下方式填写:
INSERT INTO @tablevar (userid, foo, bar, total)
SELECT userid, foo, bar, count(1) as total
FROM Table_1
GROUP BY userid, foo, bar