Sounds like a pretty bad design decision. Do you really have dynamic table names?Anyway -- here's a script hacked from a cross db script that should work. Will at least give you the info in one place rather than an unknown number of select statements.DECLARE @sql NVARCHAR(MAX)DECLARE @tableName VARCHAR(255)DECLARE @email VARCHAR(255)SET @email = 'THEADDRESS@DOMAIN'IF OBJECT_ID('tempDb..#results') IS NOT NULL DROP TABLE #resultsCREATE TABLE #results ( [tableName] VARCHAR(255) , [email] VARCHAR(255) )SET @sql = N'INSERT #results ([tableName], [email]) 'SELECT @sql = @sql + N'SELECT ' + QUOTENAME([DbTable], '''') + ', [EMAIL] FROM ' + QUOTENAME([dbTable]) + ' WHERE EMAIL = @email UNION ALL 'FROM TABLE_LISTORDER BY [dbTable]SET @Sql = LEFT(@sql, LEN(@sql) - 11) --PRINT @sqlEXEC sp_ExecuteSql @sql , N'@email VARCHAR(255)' , @emailSELECT * FROM #resultsCharlie===============================================================Msg 3903, Level 16, State 1, Line 1736The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION