Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sp_executesql + create login  [new]
MMM_Corp
Member

Откуда: Тернопіль, Україна
Сообщений: 2102
MSSQL 2012
CREATE PROCEDURE dbo.CreateNewLogin
  @type     INT,
  @username VARCHAR(50),
  @password VARCHAR(50),
  @sname    VARCHAR(50)
AS
BEGIN
  DECLARE @username2 VARCHAR(50);
  DECLARE @ParmDefinition nvarchar(500)=N'  
  @type     INT,
  @username VARCHAR(50),
  @password VARCHAR(50),
  @sname    VARCHAR(50)';


DECLARE @SQL NVARCHAR(4000) = 
  N'CREATE LOGIN [ @username ] WITH PASSWORD = '' @password '',
	  DEFAULT_DATABASE=[' + db_name() + '], DEFAULT_LANGUAGE=[Russian], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON;' +char(13);

SET @SQL = @SQL +
CASE @type
  WHEN 0 THEN    
    N'ALTER SERVER ROLE sysadmin ADD MEMBER [ @username ];'
  WHEN 1 THEN     
    N'CREATE USER [ @username ] FOR LOGIN [ @username ]; 
		  ALTER ROLE manager ADD MEMBER [ @username ];'
END;

EXEC sp_executesql @sql, @ParmDefinition,   
        @type,
        @username,
        @password,
        @sname;


END;


почемуто перменние не транслируются, а выполняются как CREATE LOGIN [@username]....
хотя если сделать так:
SET @SQL = 'select @username';

то все ок, выводит значение перменной

что не так? куда копать?

также написал другую хранимку для верности:
CREATE PROCEDURE dbo.GetOrdersList
  @date1        DATE,
  @date2        DATE,
  @datetype     SMALLINT,
  @statustype   SMALLINT,
  @searchline   VARCHAR(100),
  @bysearchline TINYINT
AS
BEGIN 
  DECLARE @ParmDefinition nvarchar(500)=N'  
          @date1        DATE,
          @date2        DATE,
          @datetype     SMALLINT,
          @statustype   SMALLINT,
          @searchline   VARCHAR(100),
          @bysearchline TINYINT';

  SET @searchline=ltrim(rtrim(@searchline));
  IF @searchline<>'' 
     SET @searchline=CONCAT('%', @searchline,  '%')
     ELSE SET @bysearchline=0;
 
  DECLARE @sql nvarchar(4000)=N'
    SELECT '+dbo.GetFieldNamesWithPermisions('orders', 'o.', 'SELECT')+'
    FROM
      orders o
    WHERE
    ((@datetype = 0)
    OR ((@datetype = 1)  AND (date_in  BETWEEN @date1 AND @date2))
    OR ((@datetype = 2)  AND (date_r   BETWEEN @date1 AND @date2))
    OR ((@datetype = 3)  AND (date_out BETWEEN @date1 AND @date2))
    )
    AND 
    ((@statustype=-1)
    OR ((@statustype=color) AND @statustype>-1)
    )
    AND
    ((@bysearchline=0)
    OR (order_num     LIKE @searchline)
    OR (comment       LIKE @searchline)
    OR (au_comment    LIKE @searchline)
    OR (author        LIKE @searchline)
    OR (work_vid      LIKE @searchline)
    OR (work_theme    LIKE @searchline)
    OR (work_type     LIKE @searchline)
    OR (work_subj     LIKE @searchline)
    OR (work_vuz      LIKE @searchline)
    OR (work_fac      LIKE @searchline)
    OR (client_phones LIKE @searchline)
    OR (client_email  LIKE @searchline)
    )
    ORDER BY order_num';


  PRINT(@sql);
  EXEC sp_executesql @sql, @ParmDefinition,           
          @date1,
          @date2,
          @datetype,
          @statustype,
          @searchline,
          @bysearchline;

  -- EXECUTE(@sql);
END
GO

- вот она то прекрасно работает, непонимаю, получается что в sp_executesql, можно передавать только переменные где они могут использоваться только как переменные или может я что делаю не так?
3 янв 13, 17:16    [13719660]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql + create login  [new]
Glory
Member

Откуда:
Сообщений: 104760
MMM_Corp
что не так? куда копать?

команда CREATE LOGIN не поддерживает переменные в качестве собственных параметров
3 янв 13, 17:30    [13719721]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql + create login  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
MMM_Corp,

Нечто похожее было у меня в вопросе - посмотрите ответы - https://www.sql.ru/forum/actualthread.aspx?tid=981915
там конечно чуть другой вопрос был, но решение Вашего думаю Вы найдете )
8 янв 13, 14:57    [13736096]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить