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

Откуда:
Сообщений: 57
begin
declare @generator int;
DECLARE c CURSOR FOR SELECT name FROM sysobjects WHERE (xtype = 'u')
OPEN c
declare @name VARCHAR(100)
declare @gname VARCHAR(100)

FETCH NEXT FROM c INTO @name
WHILE (@@FETCH_STATUS <> -1)
BEGIN
-- если писать опр имя таблицы, то все ок
select @generator = max(ID) + 1 from Users
-- но мне надо вместо имени подставлять @name
select @generator = max(ID) + 1 from @name
.........Ошибка
Msg 1087, Level 15, State 2, Line 11
Необходимо объявить табличную переменную "@name".

Как быть?
2 дек 09, 14:13    [8008313]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
maxim Ts
Member

Откуда:
Сообщений: 57
еще пробовал так :
exec('select @generator' +' = max(ID) + 1 from '+ @name)

ошибка:
Msg 137, Level 15, State 1, Line 1
Необходимо объявить скалярную переменную "@generator".
2 дек 09, 14:15    [8008325]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
https://www.sql.ru/faq/faq_topic.aspx?fid=104
2 дек 09, 14:20    [8008368]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
maxim Ts
Member

Откуда:
Сообщений: 57
а если так
declare @generator int;
exec('declare @generator int; select @generator' +' = max(ID) + 1 from '+ @name)
print(@generator)
то ошибок нет, но и значения у переменной нет
2 дек 09, 14:20    [8008369]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
maxim Ts
а если так
declare @generator int;
exec('declare @generator int; select @generator' +' = max(ID) + 1 from '+ @name)
print(@generator)
то ошибок нет, но и значения у переменной нет
Еще бы оно было.
2 дек 09, 14:21    [8008371]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
автор, вы чего хотите добиться то? есть ещё sp_executesql
2 дек 09, 14:22    [8008382]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
maxim Ts
Member

Откуда:
Сообщений: 57
Гавриленко Сергей Алексеевич,

извините, не понял, там как раз сказано про зону видимости переменных и не понятно как мне быть в моем случае, если не трудно - приведите пжл пример
2 дек 09, 14:25    [8008403]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
maxim Ts
Гавриленко Сергей Алексеевич,

извините, не понял, там как раз сказано про зону видимости переменных и не понятно как мне быть в моем случае, если не трудно - приведите пжл пример
Вы ссылку уже прочитали?
2 дек 09, 14:26    [8008410]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
maxim Ts
Member

Откуда:
Сообщений: 57
Konst_One,

я хочу переменной @generator присвоить значение и уже дальше с ней работать
2 дек 09, 14:27    [8008414]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
так присвойте, в чём проблема то?
2 дек 09, 14:28    [8008426]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
maxim Ts
Member

Откуда:
Сообщений: 57
Гавриленко Сергей Алексеевич,

прочитал, и с переменной @generator вроде понял, но
set @sql = 'select @generator = max(ID) + 1 from @name';

EXECUTE sp_executesql @sql, N'@generator int out, @name VARCHAR(100)', @generator = @generator out, @name = @name
print(@generator)
приводит в стоке 1 к ошибке Необходимо объявить табличную переменную "@name".
2 дек 09, 14:42    [8008546]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
set @sql = 'select @generator = max(ID) + 1 from '+@name;
2 дек 09, 14:44    [8008566]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
set @sql = 'select @generator = max(ID) + 1 from ' + @name;
2 дек 09, 14:44    [8008568]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
maxim Ts
Member

Откуда:
Сообщений: 57
Вот так работает
select @sql = 'select @generator = max(ID) + 1 from '+ @name;

Всем спасибо!!!
2 дек 09, 14:45    [8008577]     Ответить | Цитировать Сообщить модератору
 Re: помогите с переменной  [new]
maxim Ts
Member

Откуда:
Сообщений: 57
Гавриленко Сергей Алексеевич,

Вам отдельно огромное СПАСИБО!!
2 дек 09, 14:45    [8008584]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить