|
| Variabler i SQL-script SQL2005 Fra : Brian Sprogø |
Dato : 18-01-08 11:27 |
|
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
| |
Brian Sprogø (22-01-2008)
| Kommentar Fra : Brian Sprogø |
Dato : 22-01-08 09:52 |
|
Hejsa,
Så fik jeg strikket noget sammen der virker - det lader til at man ikke
kan bruge variabler i alle kommandoer - uden en omvej i hvertfald.
Så det endte med 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
Mvh.
Brian
Brian Sprogø skrev:
> 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
| |
|
|