|
|
|
Какая команда сбрасывает декларированные переменные?
|
|||
|---|---|---|---|
|
#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:09 |
|
||
|
Какая команда сбрасывает декларированные переменные?
|
|||
|---|---|---|---|
|
#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:14 |
|
||
|
Какая команда сбрасывает декларированные переменные?
|
|||
|---|---|---|---|
|
#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, 11:57 |
|
||
|
Какая команда сбрасывает декларированные переменные?
|
|||
|---|---|---|---|
|
#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:25 |
|
||
|
Какая команда сбрасывает декларированные переменные?
|
|||
|---|---|---|---|
|
#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 вызывается из хранимой процедуры. Думаю, что параметры уже проверены на входе хранимой процедуры на предмет потенционально опасных символов типа ";", "--" и пр. Иначе, вы правы, могут быть проблеммы. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2006, 12:32 |
|
||
|
Какая команда сбрасывает декларированные переменные?
|
|||
|---|---|---|---|
|
#18+
igor_fp, потерпите немного... Скоро kvl выйдет из отпуска и подскажет вам, как правильно поступить в данной ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 11:26 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33816123&tid=1591314]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 391ms |

| 0 / 0 |
