Variables in SQL-script SQL2005

Variables in SQL-script SQL2005

am 18.01.2008 11:59:56 von brs

Hi,

I seem to have missed something here...

Made a script for creating users on a SQL2005 - and it works just fine.

To make things easier I would like to add a couple of variables to get
around typing e.g. the username 3 times.

My script looks like this:


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

set @brugernavn = 'testuser'
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

The 2 select-statemens is for verifying the contents of the variables.

The script fails at the line 'CREATE LOGIN...' with the following messages:

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'.

How do I get the script to do what I want it to ?

Best regards,

Brian

Re: Variables in SQL-script SQL2005

am 18.01.2008 14:51:32 von Dan Guzman

> How do I get the script to do what I want it to ?

Not all DCL commands accept variables (see BOL syntax) so you'll need to use
dynamic SQL. For example:

DECLARE @SqlStatement nvarchar(MAX);

SET @SqlStatement =
N'CREATE LOGIN ' +
QUOTENAME(@brugernavn) +
N' WITH PASSWORD = ' +
QUOTENAME(@password, '''');

EXECUTE (@SqlStatement);

--
Hope this helps.

Dan Guzman
SQL Server MVP

"Brian Sprogø" wrote in message
news:479086ad$0$15886$edfadb0f@dtext01.news.tele.dk...
> Hi,
>
> I seem to have missed something here...
>
> Made a script for creating users on a SQL2005 - and it works just fine.
>
> To make things easier I would like to add a couple of variables to get
> around typing e.g. the username 3 times.
>
> My script looks like this:
>
>
> USE [master]
> GO
> DECLARE @brugernavn as char(50)
> DECLARE @password as char(50)
>
> set @brugernavn = 'testuser'
> 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
>
> The 2 select-statemens is for verifying the contents of the variables.
>
> The script fails at the line 'CREATE LOGIN...' with the following
> messages:
>
> 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'.
>
> How do I get the script to do what I want it to ?
>
> Best regards,
>
> Brian

Re: Variables in SQL-script SQL2005

am 22.01.2008 09:46:25 von brs

Hi Dan,

I modified the script to look like this, and it worked like a charm :-)

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

Thanks a lot for your help.

Best regards,

Brian

Dan Guzman skrev:
>> How do I get the script to do what I want it to ?
>
> Not all DCL commands accept variables (see BOL syntax) so you'll need to
> use dynamic SQL. For example:
>
> DECLARE @SqlStatement nvarchar(MAX);
>
> SET @SqlStatement =
> N'CREATE LOGIN ' +
> QUOTENAME(@brugernavn) +
> N' WITH PASSWORD = ' +
> QUOTENAME(@password, '''');
>
> EXECUTE (@SqlStatement);
>