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

Откуда: оттуда
Сообщений: 360
В ситуации if...else, при выполнение первого условия - создается таблица "Table" с полем "Pole1", при выполнении второго условия - создается таблица "Table" с полем "Pole2". Суть в том, что таблица должна называться и при первом условии и при втором одинаково, но поля у них должны быть различными. При этом возникает ошибка, и скуль ругается, что такая таблица уже создана, хотя ее нет в принципе. Конечно, когда создаваемые таблицы называются по разному - все работает. Есть какой то SET, который отключает эту проверку. Подскажите, пожалуйста. Или может как то по другому обойти это ограничение...
28 фев 14, 12:54    [15645662]     Ответить | Цитировать Сообщить модератору
 Re: отключение проверки корректности инструкции  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 647
Ёжик25,

Создайте таблицу с двумя полями до if...else.
28 фев 14, 12:58    [15645710]     Ответить | Цитировать Сообщить модератору
 Re: отключение проверки корректности инструкции  [new]
Ёжик25
Member

Откуда: оттуда
Сообщений: 360
Сейчас выяснил - это только при создании временных таблиц характерно.

Уточнение: в условии IF идет проверка версии

declare @q nvarchar(99)
set @q = cast((SELECT SERVERPROPERTY('ProductVersion')) as nvarchar(99))
IF @q like '10%'
create table #Table (Pole1 nvarchar(10))
else
create table #Table (Pole2 binary(16))

и выдает ошибку:

There is already an object named '#Table' in the database.
28 фев 14, 13:03    [15645768]     Ответить | Цитировать Сообщить модератору
 Re: отключение проверки корректности инструкции  [new]
Ёжик25
Member

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

у меня в эту таблицу системная процедура вставляет данные, которая возвращает в разных версиях разный набор....
28 фев 14, 13:04    [15645786]     Ответить | Цитировать Сообщить модератору
 Re: отключение проверки корректности инструкции  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
create table #t (dummy_field int);
go

if Some Conditions
 alter table #t add Pole1 nvarchar(10);
else
 alter table #t add Pole2 binary(16);

alter table #t drop column dummy_field;

select * from #t;
go

drop table #t;
go
28 фев 14, 13:15    [15645903]     Ответить | Цитировать Сообщить модератору
 Re: отключение проверки корректности инструкции  [new]
Ёжик25
Member

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

спасибо. да действительно, так тоже можно.

А почему же описанное выше происходит с временными таблицами, а с обычными нет? Тут уже чисто теоретический интерес. Весь интернет перерыл, так ничего и не нашел.
28 фев 14, 13:27    [15646010]     Ответить | Цитировать Сообщить модератору
 Re: отключение проверки корректности инструкции  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Ёжик25
А почему же описанное выше происходит с временными таблицами, а с обычными нет?
Потому что
BOL
If more than one temporary table is created inside a single stored procedure or batch, they must have different names.
И проверяется это при компиляции.
28 фев 14, 14:12    [15646500]     Ответить | Цитировать Сообщить модератору
 Re: отключение проверки корректности инструкции  [new]
Ёжик25
Member

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

Спасибо, а можно пруфлинк? Хотя бы название статьи в BOL
28 фев 14, 15:07    [15646967]     Ответить | Цитировать Сообщить модератору
 Re: отключение проверки корректности инструкции  [new]
Ёжик25
Member

Откуда: оттуда
Сообщений: 360
Ёжик25,

Все, нашел.
Спасибо. Тема закрыта.
28 фев 14, 15:08    [15646971]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить