另一個解決方案沒有CURSOR
。你可以像這樣將每個查詢與UNION
結合起來。
--SELECT DISTINCT phone_number FROM dbo.Course c
DECLARE @sql nvarchar(max) = ''
SELECT @sql = @sql + N' SELECT DISTINCT phone_number, '''+ s.name + '.' + t.name + ''' AS TableName
FROM '+ s.name + '.' + t.name + Char(13) + ' UNION' + char(13)
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
INNER JOIN sys.columns c ON c.object_id = t.object_id
WHERE c.name ='phone_number'
IF(@sql != '')
BEGIN
SET @sql = LEFT(@sql,len(@sql) - 6) -- remove last UNION
PRINT @sql
-- execute sql
EXEC sp_executesql @sql
END
我還加列TableName
:中phone_number
表如果你想TableName
如果第一列然後改變它
SELECT @sql = @sql + N' SELECT DISTINCT '''+ s.name + '.' + t.name + ''' AS TableName, phone_number
FROM '+ s.name + '.' + t.name + Char(13) + ' UNION' + char(13)
如果每個表有一個名爲列這隻會工作'PHONE_NUMBER ' – logixologist
您打算在報告或程序中使用此查詢嗎?因爲如果沒有,只需使用[SQL SEARCH](http://www.red-gate.com/dynamic/products/sql-development/sql-search/download)並在選擇「搜索表」選項時搜索「phone_number」只要。這個工具是免費的並且集成到SMSS中。 – AXMIM
@AXMIM看起來他似乎試圖讓所有電話號碼在整個數據庫中,而不管表格。 SQL Search只會告訴你他們在 – logixologist