首页 > 解决方案 > 如何计算列出了哪些表 Employee

问题描述

我想找出哪些表中有员工 x 的条目。我想这样做的原因是对员工 y 有用,我认为我在其中一个表中遗漏了一个条目,但不知道是哪个。sql server 中是否有一种通用方法来检查员工表中的员工并检查其他哪些表为他们保存值?然后对第二个员工做同样的事情然后比较?

所以我在 Employee Tables 中有 Emplyee id 1 以及如何找出数据库中的其他表为他保存的值。

标签: sqlsql-server

解决方案


考虑到所有表中的列名都相同,您可以尝试以下操作:

DECLARE @tab_name VARCHAR(100)
DECLARE @command NVARCHAR(300)
DECLARE @rowcount INT
DECLARE @tab_result TABLE(tab_name VARCHAR(100), command NVARCHAR(300), rec_count INT)

DECLARE @column_name VARCHAR(100) = 'employee_id'
DECLARE @value VARCHAR(50) = '1'

DECLARE c_tables CURSOR FAST_FORWARD FOR
SELECT Tab.name AS tab_name, 'SELECT @rowcount = COUNT(1) FROM ' + Tab.name + ' WHERE ' + Col.name + ' = ' + @value AS command
  FROM sys.all_columns AS Col
 INNER JOIN sys.sysobjects AS Tab on Tab.id = Col.object_id
 WHERE Tab.type = 'U'
   AND Col.name = @column_name
 ORDER BY Tab.name

OPEN c_tables
WHILE 1 = 1
BEGIN
    FETCH NEXT FROM c_tables INTO @tab_name, @command

    IF @@FETCH_STATUS <> 0
        BREAK

    EXEC sp_executesql @command, N'@rowcount INT OUTPUT', @rowcount OUTPUT

    IF @rowcount > 0
        INSERT INTO @tab_result VALUES (@tab_name, @command, @rowcount)
END
CLOSE c_tables
DEALLOCATE c_tables

SELECT *
  FROM @tab_result
 ORDER BY [@tab_result].rec_count DESC

只需根据您的需要设置变量@column_name@value的值。


推荐阅读