
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.06.2006, 11:09
|
|||
|---|---|---|---|
|
|||
Какая команда сбрасывает декларированные переменные? |
|||
|
#18+
Здравствуйте, All. В MS SQL 2000 В начале большой хранимой процедуре декларируются переменные. Одной из них(нужной) присваивается значение. А в середине этой ХП этой переменной уже нет: Warning: Null value is eliminated by an aggregate or other SET operation. Server: Msg 137, Level 15, State 2, Line 2 Must declare the variable '@nOtborLink1'. Какая команда сбрасывает декларированные переменные? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.06.2006, 11:14
|
|||
|---|---|---|---|
|
|||
Какая команда сбрасывает декларированные переменные? |
|||
|
#18+
Вопрос снят. Если написать в виде: declare @nOtborLink1 int set @nOtborLink1=1016738 select @cAddWhere2=isnull(@cAddWhere2,'')+' execute('' DELETE FROM ~V_OTCHET_OUT_ALIAS~ WHERE ACCOUNT NOT IN (SELECT RECORD FROM OBJECT_VAR_RECORDS WHERE LINK_UP=@nOtborLink1) '') ' то будет: The variable name '@nOtborLink1' has already been declared. Variable names must be unique within a query batch or stored procedure. Видимо select @cAddWhere2=isnull(@cAddWhere2,'')+' execute('' DELETE FROM ~V_OTCHET_OUT_ALIAS~ WHERE ACCOUNT NOT IN (SELECT RECORD FROM OBJECT_VAR_RECORDS WHERE LINK_UP=@nOtborLink1) '') ' отдельная ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.06.2006, 11:57
|
|||
|---|---|---|---|
Какая команда сбрасывает декларированные переменные? |
|||
|
#18+
Все что выполняется в EXECUTE (dynamic execution) не в scope (области видимости) вашей хранимой процедуры и, следовательно, "не видит" локальные переменные, определенные в ней. Для передачи параметров внутрь EXECUTE можно: 1. Использовать временную таблицу. Она "видна" внутри EXECUTE 2. Подставлять в динамически формируемую строку не ссылку на переменную, а ее значение: execute(' DELETE FROM ~V_OTCHET_OUT_ALIAS~ WHERE ACCOUNT NOT IN (SELECT RECORD FROM OBJECT_VAR_RECORDS WHERE LINK_UP=' + CAST(@nOtborLink1 AS VARCHAR(10)) + ')' ) С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.06.2006, 12:25
|
|||
|---|---|---|---|
Какая команда сбрасывает декларированные переменные? |
|||
|
#18+
Aleksey-K 2. Подставлять в динамически формируемую строку не ссылку на переменную, а ее значение: execute(' DELETE FROM ~V_OTCHET_OUT_ALIAS~ WHERE ACCOUNT NOT IN (SELECT RECORD FROM OBJECT_VAR_RECORDS WHERE LINK_UP=' + CAST(@nOtborLink1 AS VARCHAR(10)) + ')' ) Выход, но сопряженный с риском :)) Код: plaintext 1. 2. 3. Поэтому, лучше использовать sp_executesql с передачей параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.06.2006, 12:32
|
|||
|---|---|---|---|
Какая команда сбрасывает декларированные переменные? |
|||
|
#18+
PaulWist Aleksey-K 2. Подставлять в динамически формируемую строку не ссылку на переменную, а ее значение: execute(' DELETE FROM ~V_OTCHET_OUT_ALIAS~ WHERE ACCOUNT NOT IN (SELECT RECORD FROM OBJECT_VAR_RECORDS WHERE LINK_UP=' + CAST(@nOtborLink1 AS VARCHAR(10)) + ')' ) Выход, но сопряженный с риском :)) Код: plaintext 1. 2. 3. Поэтому, лучше использовать sp_executesql с передачей параметров. Не думаю, что риск есть в данном случае. EXECUTE вызывается из хранимой процедуры. Думаю, что параметры уже проверены на входе хранимой процедуры на предмет потенционально опасных символов типа ";", "--" и пр. Иначе, вы правы, могут быть проблеммы. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.06.2006, 11:26
|
|||
|---|---|---|---|
|
|||
Какая команда сбрасывает декларированные переменные? |
|||
|
#18+
igor_fp, потерпите немного... Скоро kvl выйдет из отпуска и подскажет вам, как правильно поступить в данной ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&mobile=1&tid=1591314]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 521ms |

| 0 / 0 |
