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