Avatar billede isl19960 Nybegynder
18. januar 2008 - 11:29 Der er 3 kommentarer og
1 løsning

Variabler i SQL-script SQL2005

Hejsa,

Jeg har vist fået stirret mig blind på en simpel lille ting...

Har lavet et script til oprettelse af brugere på en SQL2005 - og det virker efter hensigten.

For at gøre processen lidt lettere, ville jeg gerne lave et par variable øverst, så man f.eks. kun skulle indtaste oplysningen omkring brugernavn en enkelt gang istedet for 3 gange.

Mit script ser ud som følger:

USE [master]
GO
DECLARE @brugernavn as char(50)
DECLARE @password as char(50)

set @brugernavn = 'testbruger'
set @password  = N'testpassword'

select @brugernavn
select @password

CREATE LOGIN @brugernavn WITH PASSWORD= @password, DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=ON, CHECK_POLICY=ON

USE [testbase]

CREATE USER @brugernavn FOR LOGIN @brugernavn
GO


De 2 select-sætninger er for at kontrollere at indholdet af variablen er ok.

Scriptet fejler i linien omkring 'CREATE LOGIN...' med følgende fejl:

Msg 102, Level 15, State 1, Line 10
Incorrect syntax near '@brugernavn'.
Msg 319, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.
Msg 102, Level 15, State 1, Line 14
Incorrect syntax near '@brugernavn'.

Hvorledes får jeg scriptet til at gøre som jeg vil... ?

Mvh.

Brian
Avatar billede arne_v Ekspert
20. januar 2008 - 21:36 #1
Man kan sikkert ikke bruge variable der.

Konkataner en stren og EXEC den.
Avatar billede isl19960 Nybegynder
22. januar 2008 - 09:48 #2
Hej Arne_v,

Yep - det var også det jeg til sidst nåede frem til...

Så det kom til at se således ud:

USE [master]
GO
DECLARE @brugernavn as char(50)
DECLARE @password as char(50)
DECLARE @SqlStatement nvarchar(MAX);

set @brugernavn = 'testbruger'
set @password  = N'testpassword'

SET @SqlStatement =
  N'CREATE LOGIN ' +
  QUOTENAME(@brugernavn) +
  N' WITH PASSWORD = ' +
  QUOTENAME(@password, '''') +
  N', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=ON, CHECK_POLICY=ON ';

EXECUTE (@SqlStatement);

use [testbase]

SET @SqlStatement =
  N'CREATE USER ' +
  QUOTENAME(@brugernavn) +
  N' FOR LOGIN ' +
  QUOTENAME(@brugernavn)

EXECUTE (@SqlStatement);
GO

Lidt en omvej, men det virker som jeg ønsker...

Hvis du vil ha' lidt point, så læg et svar :)
Avatar billede arne_v Ekspert
22. januar 2008 - 15:28 #3
kommer her
Avatar billede arne_v Ekspert
06. april 2008 - 06:17 #4
så mangler du bare at acceptere svaret
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester