Datuve :: Forums :: Arhīvs :: Kā meklēt specifiskus ierakstus MS SQL datu bāzē?

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 70

Reģistrētie lietotāji online: 0

Viesi online: 70

Datuve.lv video
Top.LV

Kā meklēt specifiskus ierakstus MS SQL datu bāzē?

Ievietoja: ruukjis @ 2008.11.27 12:25  

Tātad problēma tāda, ir SQL 2005 datu bāze, ir SQL Server Management Studio Express, kaut kā vajadzētu dabūt laukā specifiskus ierakstus no datu bāzes, piemēram, gribu sameklēt vārdu "serviss", gribu lai meklēšana notiek pa visām datu bāzes tabulām. Googles tante neko diži nepalīdzēja - atradu vienu query scriptu, bet tas nestrādāja.

Birkas: sql

Komentāri:

#1 kaaposc @ 2008.11.27 15:41

Vai SQL Serveris piedāvā tādu iespēju kā veidot dinamiskus pieprasījumus, kuriem iepriekš nav zināms, kāda tabula un kādi lauki tiks izmantotas? Ja "jā", tad uztaisi procedūru, kas atlasa tabulas no bāzes (pēc kaut kāda kritērija, jo sistēmas tabulas diez vai Tevi interesēs), pēc tam katrai tabulai atlasa laukus, kuriem datu tips ir kāds no teksta tipiem, tad ar katru tādu atrasto tabulu un lauku veido pieprasījumu...

#2 ruukjis @ 2008.11.27 15:56

Sorry, bet SQL man ir pilnīgi tumša bilde, šobrīd esmu nosēdināts pie SQL datu bāzes ar uzdevumu atrast kaut kādu specifisku ierakstu tajā. Man nav ne mazākās poņas vai viņš ļauj veidot dinamiskus pieprasījumus kur nu vēl uztaisīt procedūru. Ja tas palīdz, tad tā ir SharePoint veidota bāze un man vajag atrast, kur glabājas SharePointā izveidoto šūnu dati iekš SQL - tobiš SharePointā ir template kurā vajag ierakstīt, teiksim, gadu, cilvēka vārdu, utt un vajag atrast kur šis templates glabājas iekš SQL.

#3 bombtrack @ 2008.11.27 22:25


select 'SELECT [' + col.[name] + '] as ' + col.[name] + '_' + obj.[name] + '
FROM [' + obj.[name] + '] WHERE [' + col.[name] + '] LIKE ''%'' ''serviss'' ''%'' '
from sys.objects obj
inner join sys.columns col
on col.[object_id] = obj.[object_id]
where obj.[type] = 'U'
and (col.[system_type_id] = 231
or col.[system_type_id] = 167
or col.[system_type_id] = 175



Šis saģenerēs pieprasījumus, kur katras tabulas varchar, char vai nvarchar laukos meklēs vārdu 'serviss'. Nokopē šī pieprasījuma rezultātus jaunā Query logā un palaid.

#4 kaaposc @ 2008.11.28 08:34

eptv... Sybase šitik filigrānu piegājienu neļauj. Plus punkts MSSQL kontā.

#5 ruukjis @ 2008.11.28 10:07

Hmm, man domāt, ka tas scripts īsti nedara, ko man vajag - principā vārda "serviss" vietā es varu ierakstīt jebkuru vārdu, bet rezultāts ir nemainīgs - tobiš, tas query izmet vienu un to pašu rezultātu (kas man diemžēl nepalīdz), lai ko es arī nerakstītu vārda "serviss" vietā.

#6 bombtrack @ 2008.11.28 15:38

Kā tad nemaina? Manis uzrakstītais query uzģenerē citus query, nevis meklē kaut ko. Tas ir vajadzīgs tāpēc, lai pašam nebūtu jāraksta ar roku query katrai tabulai. Tev ir jāizmanto šī query rezultāts, lai meklētu datus.

#7 ezzzo @ 2009.03.04 11:35

risinājums:
-> Lielu lielu kursoru, kas iet pa visām tabulām
konkrētajā datu bāzē palaid skriptu, kas atlasa visas tabulas:
select * from sysobjects where xtype = 'U'
-> Mazāku kursoru, kas iet pa visām tabulas kolonnām
skriptu, kas tabulai atrod visas kolonnas (ieteiktu papildināt ar tikai vajadzīgā tipa kolonnu atlasīšanu- syscolumns tabulā kolonna ar tipu noteikti ir)
select * from syscolumns where id = ...
-> kursorā sataisi parametrus, saliec vajadzīgo un no tā uztaisi dinamiski izpildāmu vaicājumu:
declare @vaicajums nvarchar(4000)
set @vaicajums = 'Select * From pb'
exec (@vaicajums)

--
atbilde novēlota, bet nespēju atturēties :)

#8 ruukjis @ 2009.03.04 13:00

=>#7
Haaa, haaa -.-

Anyway paldies tiem, kas mēģināja palīdzēt, galu beigās vajadzīgo scriptu dabūju no MS. Pamainīju arī pieeju tai lietai - meklēt DB ierakstus, ko izveidojis konkrēts lietotājs, konkrētā sadaļā. Ja nu kādu interesē, tad te būs arī scripts:

SELECT Alluserdata.*
FROM Userinfo
       INNER JOIN Alluserdata
       ON Userinfo.tp_id = Alluserdata.tp_author
WHERE Userinfo.tp_login = 'domain\user'
AND Alluserdata.tp_contenttype like '%task%'