[英]Executing a stored procedure to insert records into a table - SQL Server 2000
[英]SQL Server stored procedure to count matching records in two tables and insert number into another table
我有两个表,我可以通过连接找到匹配的记录。 但是,我想找到唯一列的计数以及找到的列的唯一总和,然后将该 integer 值插入另一个表列中,该列存储找到的匹配记录的计数。
例如下面的场景
表 A
ID ColumnA ColumnB
------------------------
1 John Toyota
2 John Nissan
3 John Mercedez
4 Mary Infiniti
5 Mary BMW
表B
ID ColumnA ColumnB ColumnC ColumnD ColumnE
-----------------------------------------------------------
1 John Manager Nissan Toyota Mercedez
2 Mary CEO BMW Infiniti Jaguar
所以在这个场景中,我们基于ColumnA连接表A和B。
SELECT a.ColumnA, a.ColumnB, b.ColumnA
FROM TableA a
JOIN TableB b ON a.ColumnB = b.ColumnA;
如上所示,在 TableA 和 TableB 中查找匹配记录的连接很容易,但是我在提出存储过程来查找匹配记录的数量以及唯一列时遇到了问题。
我期望做的最终结果是一个存储过程来存储
然后在表C中插入上述条件。 所以结果如下。 因为 John 出现在 TableA 和 TableB 中,我们将返回找到的唯一数据,所以在这种情况下,它将是 Toyota、Nissan 和 Mercedez - 总共 3 个。
表C
ID ColumnA ColumnB ColumnC ColumnD ColumnE
-----------------------------------------------------------
1 John Toyota Nissan Mercedez 3
2 Mary Infiniti BMW 2
将不胜感激一些指针/帮助。
CREATE PROCEDURE [dbo].[_UpdateColCByMatch]
AS
BEGIN
UPDATE y SET y.ColumnC=x.MatchCount
FROM tableB y
INNER JOIN
(
SELECT COUNT(a.ColumnA) AS MatchCount, ColumnA
FROM TableA a
JOIN TableB b ON a.ColumnA = b.ColumnA
GROUP BY ColumnA
) x ON y.ColumnA=x.ColumnA;
END
GO
这个答案假设您希望根据 ColumnA 的匹配数更新 ColumnC。
它通过获取 ColumnA 和匹配计数来工作,这很简单。 但随后我们将其用作相关子查询来加入更新语句。
UPDATE TableB SET ColumnC = (SELECT COUNT(*) FROM TableA WHERE ColumnA = TableB.ColumnA)
虽然我不是 SQL 服务器方面的专家,但我认为以下解决方案对您有用。
在您的存储过程中,您将需要查询计数,然后将该值分配给一个变量。
一旦你这样做了,你就可以在同一个存储过程中使用该变量作为插入语句的一部分。
最终,我认为它看起来像这样:
CREATE PROCEDURE InsertCountProc()
AS
BEGIN
SET NOCOUNT ON
SELECT COUNT(*) INTO @newVariable
FROM TableA a
INNER JOIN TableB b
ON a.ColumnA = b.ColumnA;
INSERT INTO COUNT_TABLE (COUNT_COLUMN)
VALUES (@newVariable);
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.