Problem in creating stored procedure.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • priyamtheone
    New Member
    • Sep 2007
    • 88

    #1

    Problem in creating stored procedure.

    I'm trying to create a stored procedure in MSSQL Server 2005 that'll perform the following jobs:
    1) Create a login.
    2) Create an user in TestDB database for the login created in step 1.
    3) Assign the role 'db_generaluser ' to the user created in step 2.

    The login name and password for the login to be created will be supplied from externally through input parameters. If this procedure executes successfully it returns 0 else 1 to the caller through an output parameter.

    When I try to compile it, it's prompting the following error messages:
    Msg 102, Level 15, State 1, Procedure sp_CreateLogin, Line 23
    Incorrect syntax near '@loginname'.

    Msg 319, Level 15, State 1, Procedure sp_CreateLogin, Line 23
    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 319, Level 15, State 1, Procedure sp_CreateLogin, Line 27
    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.

    What's my mistake? Plz help. My code follows:

    Code:
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- ==========================================================================================================
    -- Author:	Priyamtheone
    -- Create date: 2009-Oct-08
    -- Description:	This procedure is used to create a login, create an user in TestDB database associated to
    --		that login and assign the role 'db_generaluser' to that user. The login name and password
    --		will be supplied from externally through input parameters. If this procedure executes
    --		successfully it returns 0 else 1 to the caller through an output parameter.
    -- ==========================================================================================================
    CREATE PROCEDURE [dbo].[sp_CreateLogin] 
    	-- Add the parameters for the stored procedure here.
    	@loginname sysname,
    	@passwd	sysname,
    	@intRetVal int = 0 output	--Output parameter.
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
    	SET NOCOUNT ON;
    	SET @intRetVal = 0;
    
    	BEGIN TRY
    		CREATE LOGIN @loginname WITH PASSWORD=@passwd, DEFAULT_DATABASE=[TestDB], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    
    		CREATE USER @loginname FOR LOGIN @loginname WITH DEFAULT_SCHEMA=[dbo]
    
    		EXEC sp_addrolemember N'db_generaluser', @loginname
    	END TRY
    	BEGIN CATCH
    		SET @intRetVal = 1;	--Something went wrong. So set the return value to 1.
    	END CATCH
    END
    GO
  • ck9663
    Recognized Expert Specialist
    • Jun 2007
    • 2878

    #2
    Try removing the default_schema parameter. If you left it blank, it will default to 'dbo' anyway.

    Good luck!!!


    --- CK

    Comment

    • nbiswas
      New Member
      • May 2009
      • 149

      #3
      Try something like
      Code:
      set @str = '
              CREATE LOGIN ' + @loginname  + 'WITH PASSWORD=' + @passwd +', DEFAULT_DATABASE=[TestDB], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
       
              CREATE USER' +  @loginname + 'FOR LOGIN' +  @loginname + ' WITH DEFAULT_SCHEMA=[dbo]'
      Hope it will work.. didnot test though

      Comment

      Working...