Men den er faktisk ikke så svær at lave med dynamisk SQL. Du skal læse tabeller og kolonner (inkl. datatyper) fra SYSTEM_INFORMATION.COLUMNS - så opbygger du en dynamisk query der tester for den ønskede værdi i hver enkelt tabel.
Faktisk ikke - det er ikke et normalt behov i en relationel database. Meningen med den er jo at data kun giver mening i sammenhæng med andre data - og man ved hvor data af en given type er lagret.
Jeg har dog lige skrevet en procedure - den looper alt i basen gennem og undersøger om der er matchende data i nogen tabel. Bemærk at du får separate recordset ud per tabel - ikke et samlet.
create procedure dbo.SearchDatabase (@value varchar(50)) as begin -- lidt variabler til senere brug declare @oldtable sysname, @table sysname, @column sysname declare @sql varchar(888), @cols varchar(888)
-- cursor til columns-informationer declare crsr cursor local fast_forward for select '['+table_schema+'].['+table_name+']', '['+column_name+']' from INFORMATION_SCHEMA.COLUMNS
-- åbn den, og hent første række open crsr fetch next from crsr into @table, @column
-- Initier variabler set @oldtable = @table set @cols = ''
-- Loop gennem fundne data while @@fetch_status=0 begin
-- Hvis vi er færdige med at opbygge en kolonneliste, så udtræk matchende rækker if @oldtable<>@table begin if len(@cols)>2 begin set @sql = 'SELECT * FROM '+@oldtable+' WHERE '+right(@cols,len(@cols)-2) print @sql exec (@sql) end set @cols='' set @oldtable = @table end else begin --opbyg kolonneliste, lav alt om til varchar set @cols=@cols+'OR CAST ('+@column+' AS VARCHAR) LIKE ''%'+@value+'%'' ' end -- Næste række fetch next from crsr into @table, @column end close crsr deallocate crsr end go
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.