Vinnaren i pepparkakshustävlingen!
2009-12-21, 15:31
  #1
Medlem
SorenMp3s avatar
Sitter med ett tiotal databaser och har helt enkelt tröttnat på att ställa samma fråga flera ggr. Visst måste det gå att göra en sökning i alla db på en och samma gång? Bifoga gärna ett exempel typ SELECT * FROM db_all.customer where?? eller vad det nu kan tänkas bli.

Tack på förhand!
Citera
2009-12-21, 15:54
  #2
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av SorenMp3
Sitter med ett tiotal databaser och har helt enkelt tröttnat på att ställa samma fråga flera ggr. Visst måste det gå att göra en sökning i alla db på en och samma gång? Bifoga gärna ett exempel typ SELECT * FROM db_all.customer where?? eller vad det nu kan tänkas bli.

Tack på förhand!
Nej det går inte att ställa någon sådan fråga. Däremot borde det gå att lösa med en UNION för att slå ihop alla result-sets till ett:

Kod:
SELECT fält1,fält2 FROM db1.tabell WHERE ...
UNION ALL
SELECT fält1,fält2 FROM db2.tabell WHERE ...
UNION ALL
SELECT ....

var noga med att samtliga SELECT-queries returnerar samma antal fält, av samma typ, i samma ordning, annars blir union arg på dig
Om du dessutom selectar en hårdkodad sträng i varje query kan du härleda resultatet till rätt databas:

Kod:
SELECT 'db1' AS DbNamn, fält1, fält2 FROM db1.tabell
UNION ALL 
SELECT 'db2' AS DbNamn, fält1, fält2 ...
__________________
Senast redigerad av gadzoox 2009-12-21 kl. 15:59.
Citera
2009-12-21, 16:14
  #3
Medlem
SorenMp3s avatar
Super! Då behöver jag bara göra klart ett formulär med några av mina vanligaste frågor och sedan sitta och stansa in lite data. Inte en perfekt lösning men för mig duger den Tack!
Citera
2009-12-21, 16:18
  #4
Medlem
SorenMp3s avatar
Citat:
Ursprungligen postat av SorenMp3
Super! Då behöver jag bara göra klart ett formulär med några av mina vanligaste frågor och sedan sitta och stansa in lite data. Inte en perfekt lösning men för mig duger den Tack!


hittade precis hur man söker i alla databaser samtidigt.
t.ex.
select * from sys.databases, statno where stat_desc like '%powders%'
Citera
2009-12-21, 16:35
  #5
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av SorenMp3
hittade precis hur man söker i alla databaser samtidigt.
t.ex.
select * from sys.databases, statno where stat_desc like '%powders%'

sys.databases innehåller bara metadata om vilka databaser du har i servern. Du söker inte i databaserna ifråga bara för att du tittar i sys.databases. Om du nu hade gjort det, vilken tabell hade du i så fall selectat från? Hur hade du/servern kunnat garantera att schema är lika? Vad är statno? stat_desc? Möjligen kan du använda sys.databases som ett sätt att ta reda på vilka databaser som finns och därigenom bygga upp en stor query med unions.. Men då kommer följdfrågorna; vilka av databaserna skall du söka i? Hur kan du med säkerhet veta att tabellen du efterfrågar finns i samtliga de databaserna? Kan du vara säker på att du har selecträttigheter på dem? Kan du vara säker på att schema är likvärdiga?

Nej, den där vägen tror jag inte alls på, kommer inte funka särskilt stabilt. Låt inte din egen lättja resultera i att du bygger ett rangligt fulhack som brakar ihop så fort man blåser på den
__________________
Senast redigerad av gadzoox 2009-12-21 kl. 16:37. Anledning: Bytte ut 'en ranglig lösning' mot 'ett rangligt fulhack', jag ser det inte som en lösning :)
Citera
2010-01-14, 20:05
  #6
Medlem
stigmas avatar
Det går ju visst .. Tex :

select * from tbl1
inner join db2.dbo.tbl2 t2
on tbl1.id = t2.id

för att nå den andra databasen (i mssql) skriv databasnamn.dbo.tabellnamn
Citera
2010-01-14, 22:08
  #7
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av stigma
Det går ju visst .. Tex :

select * from tbl1
inner join db2.dbo.tbl2 t2
on tbl1.id = t2.id

för att nå den andra databasen (i mssql) skriv databasnamn.dbo.tabellnamn
Har någon påstått något annat? Jag visar det ju till och med i mitt första svar...

Snacka om att helt missa poängen, glömde du läsa tråden?
Varför visar du en join i ditt exempel? TS nämner inte att någon relation (logisk givetvis, inte fysisk då det handlar om olika databaser) mellan datat i de olika databaserna finns. Däremot nämner TS att det är jobbigt att ställa samma fråga flera gånger, detta tycker jag hintar om att datat faktiskt inte har någon inbördes relation utan snarare är samma typ av data utspritt på flera ställen. Detta backas även upp av den pseudofråga TS visar i sitt inlägg samt hans jakande svar på mitt exempel med union. Vad en join i det här fallet skulle ha med saken att göra, samt hur den skulle kunna lösa TS problem, övergår helt mitt förstånd. Förklara gärna hur du tänkte, om du nu gjorde det...
Citera
2010-01-14, 23:37
  #8
Medlem
Maskinoppvasks avatar
Citat:
Ursprungligen postat av gadzoox
Har någon påstått något annat? Jag visar det ju till och med i mitt första svar...
Nej.
Syntaxen i T-SQL är database.schema.table, inte database.table som du skrev.

Hade du däremot haft två punkter mellan dina namn hade jag köpt det eftersom utelämnande innebär att man går på default (i regel dbo).
Citera
2010-01-14, 23:46
  #9
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av Maskinoppvask
Nej.
Syntaxen i T-SQL är database.schema.table, inte database.table som du skrev.

Hade du däremot haft två punkter mellan dina namn hade jag köpt det eftersom utelämnande innebär att man går på default (i regel dbo).
Dagligen använder jag syntaxen ifråga i SQL Management Studio, så jag vet att den funkar.


Eh... Edit: Jag är dum i huvudet. Det är ok att påpeka det för mig. Det sitter så hårt i ryggmärgen att jag inte ens funderar på vad jag egentligen skriver, det är klart jag använder två punkter....

Bortsett från syntaxblundern kvarstår dock min fråga till stigma....
__________________
Senast redigerad av gadzoox 2010-01-14 kl. 23:48.
Citera
2010-02-05, 20:47
  #10
Medlem
Är kanske fel på det men kan TS inte använda linked servers?
Citera
2010-02-05, 21:10
  #11
Medlem
Maskinoppvasks avatar
Citat:
Ursprungligen postat av Nyfiken2
Är kanske fel på det men kan TS inte använda linked servers?
Linked servers är till för remote servers ("avlägsna servrar"? vad heter det egentligen på svenska?). I det här fallet nämndes bara databaser och då kan man dra slutsatsen (kanske felaktig) att samtliga databaser finns på samma server (och även samma instans). Då är linked servers inte rätt väg att gå utan man knackar sin T-SQL som ovan.
Citera
2010-02-05, 21:12
  #12
Medlem
Citat:
Ursprungligen postat av Maskinoppvask
Linked servers är till för remote servers ("avlägsna servrar"? vad heter det egentligen på svenska?). I det här fallet nämndes bara databaser och då kan man dra slutsatsen (kanske felaktig) att samtliga databaser finns på samma server (och även samma instans). Då är linked servers inte rätt väg att gå utan man knackar sin T-SQL som ovan.

Ah självklart. Tog ju för givet att databaserna låg i olika servrar
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback