如何计算列出雇员的表

时间:2018-08-18 11:48:13

标签: sql sql-server

我想找出哪些表中有雇员x的条目。我要执行此操作的原因是对y员工有用,我想我在其中一个表中缺少一个条目,但不知道哪个。在sql server中,是否有一种通用方法可以检查Employee表中的一个雇员并检查其他哪些表为其保存了值?然后对第二个员工做同样的事情,然后进行比较?

因此,我在Employee表中具有Emplyee id 1,该如何查找数据库中还有哪些其他表为其保存值。

1 个答案:

答案 0 :(得分:1)

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

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 的值。 >