Ik ben een beetje de weg kwijt:
Dit select statement wil ik in elke database op mijn instance uit kunnen voeren en vervolgens op elk individueel resultaat de volgende opdracht uitvoeren.
Nu heb ik wel binnen een sp een cursor geschreven waarin elke database geselecteerd wordt en vervolgens een andere sp aangeroepen wordt waarmee bovenstaand select statement uitgevoerd wordt, maar ik zit met het probleem dat ik steeds alleen maar de tabellen van de database terugkrijg waar de sp zich in bevindt. Op zich ook logisch. Maar hoe los ik dit nu op. Je kan binnen een SP geen 'use database' opdracht geven, dus hoe kan ik dan dynamisch selecteren binnen een sp naar steeds een andere database voor de sysobjects en sysindexes tabel.
De code die ik tot nu toe heb, maar fout gaat:
code:
1
2
3
4
5
6
7
| SELECT [O].[name]
FROM [sysobjects] [O]
, [sysindexes] [I]
WHERE [O].[type] IN ('U')
AND [O].[id] = [I].[id]
AND [I].[indid] IN (0, 1)
AND [O].[type] != 'S' |
Dit select statement wil ik in elke database op mijn instance uit kunnen voeren en vervolgens op elk individueel resultaat de volgende opdracht uitvoeren.
code:
1
| DBCC REINDEX (@tbl_nam, '', 70) |
Nu heb ik wel binnen een sp een cursor geschreven waarin elke database geselecteerd wordt en vervolgens een andere sp aangeroepen wordt waarmee bovenstaand select statement uitgevoerd wordt, maar ik zit met het probleem dat ik steeds alleen maar de tabellen van de database terugkrijg waar de sp zich in bevindt. Op zich ook logisch. Maar hoe los ik dit nu op. Je kan binnen een SP geen 'use database' opdracht geven, dus hoe kan ik dan dynamisch selecteren binnen een sp naar steeds een andere database voor de sysobjects en sysindexes tabel.
De code die ik tot nu toe heb, maar fout gaat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[_SP_dbb_dbs_rdx]
@dbs_nam varchar(25)
AS
SET NOCOUNT ON
DECLARE @TBL_NAM AS VARCHAR(512) -- Tabel naam
DECLARE @OPD AS VARCHAR(1024) -- Opdracht
USE @dbs_nam
DECLARE TBL_CUR CURSOR FOR
SELECT [O].[name]
FROM [sysobjects] [O]
, [sysindexes] [I]
WHERE [O].[type] IN ('U')
AND [O].[id] = [I].[id]
AND [I].[indid] IN (0, 1)
AND [O].[type] != 'S'
OPEN TBL_CUR
FETCH NEXT FROM TBL_CUR INTO @TBL_NAM
WHILE @@FETCH_STATUS = 0
BEGIN
SET @OPD = 'DBCC DBREINDEX(' + @TBL_NAM + ', '''', 70)'
PRINT @OPD
EXEC (@OPD)
FETCH NEXT FROM TBL_CUR INTO @TBL_NAM
END
CLOSE TBL_CUR
DEALLOCATE TBL_CUR
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO |
Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!