Ik heb een stored procedure gemaakt die een aantal tabellen in een database moet aanmaken, maar het gaat niet helemaal goed.
Ik wil eigenlijk een query waarbij de databasenaam een variable is en dat hij in die database een aantal tabellen aanmaakt.
Hierbij gebruik in een varchar om die use statement aan te maken, omdat de databasenaam een variable is. Alleen het probleem hierbij is dat hij de use niet eerst uitvoert en dat hij dan de tabellen in z'n eigen database (waar stored procedure is opgeslagen) wil gaan aanmaken. Volgens de check syntax knopje is mn syntax verder wel goed. Nu zal je zeggen dat je een GO ertussen moet stoppen, zodat hij dan wel eerst die use uitvoert, maar dat mag niet van de enterprise manager. Dan geeft hij de fout aan: "Error 2714: there is already an object named 'dtproperties' in the database.", maar dat is al bij het opslaan van de stored procedure, nog niet eens bij het uitvoeren.
Je kunt ook niet zeggen van:
Want dat mag niet, omdat @DBName een varchar is.
Hoe krijg ik dit werkend.
Ik las net trouwens dat GO een batch delimiter is (tijdens het zoeken) en dat je die dus niet tussendoor ff in een stored procedure kan gebruiken.
Ik wil eigenlijk een query waarbij de databasenaam een variable is en dat hij in die database een aantal tabellen aanmaakt.
SQL:
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
| CREATE PROCEDURE cms.newCreateTables ( @DBName varchar(20) ) AS DECLARE @SQLstr AS varchar(1000) SET @SQLstr = 'USE ' + @DBName EXECUTE(@SQLstr) CREATE TABLE [dtproperties] ( [id] [int] IDENTITY (1, 1) NOT NULL , [objectid] [int] NULL , [property] [varchar] (64) COLLATE Latin1_General_CI_AS NOT NULL , [value] [varchar] (255) COLLATE Latin1_General_CI_AS NULL , [uvalue] [nvarchar] (255) COLLATE Latin1_General_CI_AS NULL , [lvalue] [image] NULL , [version] [int] NOT NULL CONSTRAINT [DF__dtpropert__versi__77BFCB91] DEFAULT (0), CONSTRAINT [pk_dtproperties] PRIMARY KEY CLUSTERED ( [id], [property] ) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO |
Hierbij gebruik in een varchar om die use statement aan te maken, omdat de databasenaam een variable is. Alleen het probleem hierbij is dat hij de use niet eerst uitvoert en dat hij dan de tabellen in z'n eigen database (waar stored procedure is opgeslagen) wil gaan aanmaken. Volgens de check syntax knopje is mn syntax verder wel goed. Nu zal je zeggen dat je een GO ertussen moet stoppen, zodat hij dan wel eerst die use uitvoert, maar dat mag niet van de enterprise manager. Dan geeft hij de fout aan: "Error 2714: there is already an object named 'dtproperties' in the database.", maar dat is al bij het opslaan van de stored procedure, nog niet eens bij het uitvoeren.
Je kunt ook niet zeggen van:
SQL:
1
| USE @DBname |
Want dat mag niet, omdat @DBName een varchar is.
Hoe krijg ik dit werkend.
Ik las net trouwens dat GO een batch delimiter is (tijdens het zoeken) en dat je die dus niet tussendoor ff in een stored procedure kan gebruiken.
[ Voor 4% gewijzigd door eghie op 06-07-2004 11:48 ]