powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический запрос "обрезался"?!
11 сообщений из 11, страница 1 из 1
Динамический запрос "обрезался"?!
    #39641459
black_labeler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

У меня произшел следующий случай.
В процедуре присутствует динамический запрос, который создает таблицу.
Типа такого.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<...>

declare @qqq varchar(max)
       ,@tblName varchar(200);

set @tblName = 'qwaqwa' + convert(varchar(10), current_timestamp, 120);

set @qqq = 
'create table [' + @tblName + ']
   (keyID int not null identity(0,1) primary key
   ,col01 int
   ,col02 int
   ,col03 int
   ,col04 int
   ,col05 int
   ,col06 int
   ,col07 int
)';

exec (@qqq);

<...>



Вот она работает и работает себе, а в какой-то день "рраз!" и создает таблицу, но только без двух последних полей...
И я никак не могу понять, вследствие чего произошло такое неожиданное для меня выполнение запроса.

Кто-нибудь сталкивался с подобным?
Расскажите!

Пробовал гуглить, но скорее всего нормально сформулировать вопрос не получается у меня, поэтому ничего похожего не нашел.
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641465
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_labeler,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
declare @qqq varchar(max)
       ,@tblName varchar(200);

set @tblName = 'qwaqwa' + convert(varchar(10), current_timestamp, 120);

set @qqq = convert(varchar(max),
'create table [') + convert(varchar(max),@tblName) + convert(varchar(max),']
   (keyID int not null identity(0,1) primary key
   ,col01 int
   ,col02 int
   ,col03 int
   ,col04 int
   ,col05 int
   ,col06 int
   ,col07 int
)');

exec (@qqq);
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641486
black_labeler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andy_OLAP,

Получается, запрос не отработал корректно из-за того, что параметры строк, из которых он состоит, не приведены к одному типу, а точнее к одинаковому размеру?

Но до этого же все формировал, и сейчас формирует..
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641500
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_labelerAndy_OLAP,

Получается, запрос не отработал корректно из-за того, что параметры строк, из которых он состоит, не приведены к одному типу, а точнее к одинаковому размеру?

Но до этого же все формировал, и сейчас формирует..

"If the result of the concatenation of strings exceeds the limit of 8,000 bytes, the result is truncated . However, if at least one of the strings concatenated is a large value type, truncation does not occur. "

Прямая ссылка на официальную документацию .
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641505
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

Наверное вы знаете секретный трейс-флаг, который позволяет серверу предсказывать предназначение переменной и, соответственно игнорировать все, что не поместится в итоговую строку, но с учетом синтаксиса формируемой команды, в том числе оставлять закрывающую скобку.
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641507
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_labeler и создает таблицу, но только без двух последних полей...

Подумал и таки понял, что если бы было обрезание - так закрывающаяся круглая скобка не попала бы. И таблица бы не создалась никак.
Значит, у Вас берется старый вариант текста без новых двух столбцов. Вот и все. Ищете место, откуда собирается " ,col06 int
,col07 int" - это статичный текст или Вы чего-то недоговариваете, и столбцы через запятую собираются динамически из другого места?
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641508
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmAndy_OLAP,

Наверное вы знаете секретный трейс-флаг, который позволяет серверу предсказывать предназначение переменной и, соответственно игнорировать все, что не поместится в итоговую строку, но с учетом синтаксиса формируемой команды, в том числе оставлять закрывающую скобку.
Конечно, но Вам не скажу. Вы слишком умный для того, чтобы использовать секретные трейсы-флаги.
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641516
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPКонечно, но Вам не скажу. Вы слишком умный для того, чтобы использовать секретные трейсы-флаги.Вот именно. Умные не пользуют секретных трейс-флагов, даже если знают о них.
А вот некоторые "эксперты" да, могут.
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641528
лолл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_labeler,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare @qqq nvarchar(max)
       ,@tblName sysname;

set @tblName = quotename(N'qwaqwa' + convert(varchar(10), current_timestamp, 120));

set @qqq = CAST(N'' as nvarchar(max)) +
N'create table ' + @tblName + N'
   (keyID int not null identity(0,1) primary key
   ,col01 int
   ,col02 int
   ,col03 int
   ,col04 int
   ,col05 int
   ,col06 int
   ,col07 int
)';

if @qqq is not null
  exec (@qqq);
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641531
black_labeler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andy_OLAPblack_labeler и создает таблицу, но только без двух последних полей...

Подумал и таки понял, что если бы было обрезание - так закрывающаяся круглая скобка не попала бы. И таблица бы не создалась никак.
Значит, у Вас берется старый вариант текста без новых двух столбцов. Вот и все. Ищете место, откуда собирается " ,col06 int
,col07 int" - это статичный текст или Вы чего-то недоговариваете, и столбцы через запятую собираются динамически из другого места?

Нет-нет, все прописано таким образом, как я указал, переменная часть - это только имя таблицы.
Причем размер формируемой строки запроса не превышает 1000 байт.

А вот про старый вариант я не подумал.
Покопаю.
...
Рейтинг: 0 / 0
Динамический запрос "обрезался"?!
    #39641873
black_labeler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да.
Реально существует процедура, которая дублирует основную, и, в частности, создает таблицу без необходимых полей.

Разработчики за какими-то причинами создали дублирующую процедуру, которая вызывалась при совпадении определенных параметров.
Адаптируя функционал к необходимым требованиям, в дублирующей процедуре они либо забыли изменить параметры, либо поменять имя вызываемой процедуры.

Спасибо!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический запрос "обрезался"?!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]