powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка в ALTER TABLE
17 сообщений из 17, страница 1 из 1
Ошибка в ALTER TABLE
    #40119687
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех.
У меня выбивает ошибку при попытке создать константу в ALTER TABLE, так как хочу сослаться на переменную.
А пробую создать динамическое подключение, чтобы обойти этот момент, но что-то не получается. Так как если ставлю значение default (0) или любую дату в константу - все работает.
Мой код здесь:
https://pastebin.com/p0xqbQMC
Принцип кода таков:
1. Выбираю дату в текущем месяце (обычно 1 число текущего месяца)
2. Высчитываю количество дней между 1 число и сегодняшней датой и записываю этот перечень в таблицу.
3. Создаю таблицу для выгрузки данных из процедуры процедуры, которая высчитывает поступления по дням.
4. Создаю курсор (это не обязательно, просто хотел потренироваться, до этого ни разу его не использовал)
и перебираю даты из текущего месяца.
5. Поскольку процедура get_otchet создана не мной и доступа к ней я не имею, в ней нет даты формирования отчета (за какой день).
Я хочу в конце всех данных, которая выгружает процедура в таблицу вставить дату, за которую был сформирован отчет.

В общем по итого у меня ошибка Msg 3728, Level 16, State 1, Line 58
'df_datecurra' is not a constraint.
Msg 3727, Level 16, State 0, Line 58
Could not drop constraint. See previous errors.


Может у Вас есть идеи?
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119692
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog,

Запрос не смотрел, но первый шаг при отладке динамических запросов - это их вывод на экран (print @sql) вместо выполнения
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119696
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
попробовал - первый раз, когда проганяет запрос - четко показывает. Потом идет ошибка и на второй заход
цикл не идет
Ошибка:
Msg 3728, Level 16, State 1, Line 59
'df_datecurra' is not a constraint.
Msg 3727, Level 16, State 0, Line 59
Could not drop constraint. See previous errors.
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119697
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gerzzog
msLex,
попробовал - первый раз, когда проганяет запрос - четко показывает. Потом идет ошибка и на второй заход
цикл не идет
Ошибка:
Msg 3728, Level 16, State 1, Line 59
'df_datecurra' is not a constraint.
Msg 3727, Level 16, State 0, Line 59
Could not drop constraint. See previous errors.


Но опять же. Если поставить дефолтное значение 0 или любую дату - все сформирует
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119701
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, у вас констрейнт создается динамически, а удаляется обычным кодом.

Так не выйдет , оберните ALTER TABLE #tmpBusicasapodnyam1 DROP CONSTRAINT df_datecurra в EXEC ('...')
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119704
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
я пробовал. Дописал этот код:
SET @sql_str ='alter table #tmpBusicasapodnyam1 drop constraint df_datecurra'
EXEC(@sql_str)
Не помогает, к сожалению. Все та же ошибка.
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119705
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog,

ALTER TABLE не создаёт никаких констант.

автор2. Высчитываю количество дней между 1 число и сегодняшней датой и записываю этот перечень в таблицу.
Это что за поток сознания? Количество дней - это единственное число, а не список.

авторСоздаю таблицу для выгрузки данных из процедуры процедуры
WTF процедура процедуры?
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119706
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
gerzzog,

ALTER TABLE не создаёт никаких констант.

автор2. Высчитываю количество дней между 1 число и сегодняшней датой и записываю этот перечень в таблицу.

Это что за поток сознания? Количество дней - это единственное число, а не список.

авторСоздаю таблицу для выгрузки данных из процедуры процедуры
WTF процедура процедуры?

Сначала высчитываю количество дней потом отдельно загоняю даты в таблицу. Это два отдельных процесса.

WTF процедура процедуры? - опечатался. Просто запускаю процедуру, которая выдает данные по продажам по каждому дню в таблицу
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119716
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выполните и гляньте что у вас там "напритовалось", часть вопросов отпадет.





Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
DROP TABLE IF EXISTS #tmpBusicasapodnyam1
DECLARE @nowDate datetime = getdate() 
DECLARE @DateRange datetime
DECLARE @startdat datetime = '2021-12-10 00:00:00.000'
DECLARE @i INT = 0
DECLARE @kolDays INT
DECLARE @def VARCHAR(20)
DECLARE @sql_str VARCHAR(MAX)
SET @kolDays = datediff(DAY,@startdat,@nowDate) 
DECLARE @tablDateRange TABLE(DateRange datetime)
while @i < @kolDays
BEGIN    
    INSERT INTO @tablDateRange (DateRange)
    SELECT dateadd(DAY,@i,@startdat)
    SET @i = @i + 1
END;
 
 
CREATE TABLE #tmpBusicasapodnyam1 
    (market_name VARCHAR(255), market_id DOUBLE PRECISION, dep_special DOUBLE PRECISION, bonus_used_brt DOUBLE PRECISION)
    ALTER TABLE #tmpBusicasapodnyam1 ADD datecurra VARCHAR(MAX);
 
DECLARE idx_cursor CURSOR LOCAL FOR SELECT DateRange FROM @tablDateRange;
OPEN idx_cursor;
FETCH NEXT FROM idx_cursor
INTO @DateRange;
WHILE @@fetch_status = 0
BEGIN
    DECLARE @dateEnd datetime = dateadd(HOUR, 23,@DateRange)    
    SET @sql_str = 'alter table #tmpBusicasapodnyam1 add constraint df_datecurra default '  + CAST(@DateRange AS VARCHAR(MAX)) + '  for datecurra'
    print @sql_str
    
    FETCH NEXT FROM idx_cursor
    INTO @DateRange;
END;
CLOSE idx_cursor;
DEALLOCATE idx_cursor;
SELECT *
FROM #tmpBusicasapodnyam1
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119718
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog
Мой код здесь:
Вы бы вставили код в свой пост, в спойлере и теге SRC. Неохота лезть на какой то непонятный сайт.
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119815
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
запрос проработал и такие сообщения:
(1 row affected)

(1 row affected)

(1 row affected)

(1 row affected)
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 10 2021 12:00AM for datecurra
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 11 2021 12:00AM for datecurra
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 12 2021 12:00AM for datecurra
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 13 2021 12:00AM for datecurra

(0 rows affected)

Completion time: 2021-12-14T07:56:26.3366993+03:00
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119816
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
gerzzog
Мой код здесь:
Вы бы вставили код в свой пост, в спойлере и теге SRC. Неохота лезть на какой то непонятный сайт.


Вот полный код здесь выкладываю:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
DROP TABLE IF EXISTS #tmpBusicasapodnyam1
DECLARE @nowDate datetime = getdate() 
DECLARE @DateRange datetime
DECLARE @startdat datetime = '2021-12-10 00:00:00.000'
DECLARE @i INT = 0
DECLARE @kolDays INT
DECLARE @def VARCHAR(20)
DECLARE @sql_str VARCHAR(MAX)
SET @kolDays = datediff(DAY,@startdat,@nowDate) 
DECLARE @tablDateRange TABLE(DateRange datetime)
while @i < @kolDays
BEGIN    
    INSERT INTO @tablDateRange (DateRange)
    SELECT dateadd(DAY,@i,@startdat)
    SET @i = @i + 1
END;
 
 
CREATE TABLE #tmpBusicasapodnyam1 
    (market_name VARCHAR(255), market_id DOUBLE PRECISION, dep_special DOUBLE PRECISION, bonus_used_brt DOUBLE PRECISION)
    ALTER TABLE #tmpBusicasapodnyam1 ADD datecurra VARCHAR(MAX);
 
DECLARE idx_cursor CURSOR LOCAL FOR SELECT DateRange FROM @tablDateRange;
OPEN idx_cursor;
FETCH NEXT FROM idx_cursor
INTO @DateRange;
WHILE @@fetch_status = 0
BEGIN
    DECLARE @dateEnd datetime = dateadd(HOUR, 23,@DateRange)    
    SET @sql_str = 'alter table #tmpBusicasapodnyam1 add constraint df_datecurra default '  + CAST(@DateRange AS VARCHAR(MAX)) + '  for datecurra'
    EXEC(@sql_str)
    INSERT INTO #tmpBusicasapodnyam1 (market_name , market_id , dep_special , bonus_used_brt)
    EXEC get_otchet @pstart_date = @DateRange, @pend_date = @dateEnd
    SET @sql_str = 'ALTER TABLE #tmpBusicasapodnyam1 DROP CONSTRAINT df_datecurra'
    EXEC(@sql_str)
    
    FETCH NEXT FROM idx_cursor
    INTO @DateRange;
END;
CLOSE idx_cursor;
DEALLOCATE idx_cursor;
SELECT *
FROM #tmpBusicasapodnyam1

...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119822
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
кстати, если я запускаю:
Код: sql
1.
2.
3.
4.
5.
6.
 
DECLARE @dateEnd datetime = dateadd(HOUR, 23,@DateRange)    
    SET @sql_str = 'alter table #tmpBusicasapodnyam1 add constraint df_datecurra default '  + try_convert(VARCHAR(MAX),@DateRange) + '  
    for datecurra'
    print @sql_str
    EXEC(@sql_str)



то пишет ошибку

alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 10 2021 12:00AM for datecurra
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '10'.
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 11 2021 12:00AM for datecurra
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '11'.
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 12 2021 12:00AM for datecurra
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '12'.
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 13 2021 12:00AM for datecurra
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '13'.

это на даты, которые я из datetime в varchar перевожу
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119824
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog,

а вас ничего не смущает что строка :
Код: sql
1.
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 13 2021 12:00AM for datecurra


синтаксически неправильна?

и на "подумать" где там у вас чего не хватает
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119829
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
gerzzog,

а вас ничего не смущает что строка :
Код: sql
1.
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default Dec 13 2021 12:00AM for datecurra


синтаксически неправильна?

и на "подумать" где там у вас чего не хватает

пытаюсь "кавычки" расставить, но что-то не хочет. И скобку возле кавычек. Где правильнее это делать?

вот так делаю:
Код: sql
1.
SET @sql_str = 'alter table #tmpBusicasapodnyam1 add constraint df_datecurra default "'  + cast(@DateRange as VARCHAR(MAX)) + '"  for datecurra'



и ошибка:

alter table #tmpBusicasapodnyam1 add constraint df_datecurra default "Dec 10 2021 12:00AM" for datecurra
Msg 128, Level 15, State 1, Line 1
The name "Dec 10 2021 12:00AM" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default "Dec 11 2021 12:00AM" for datecurra
Msg 128, Level 15, State 1, Line 1
The name "Dec 11 2021 12:00AM" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default "Dec 12 2021 12:00AM" for datecurra
Msg 128, Level 15, State 1, Line 1
The name "Dec 12 2021 12:00AM" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.
alter table #tmpBusicasapodnyam1 add constraint df_datecurra default "Dec 13 2021 12:00AM" for datecurra
Msg 128, Level 15, State 1, Line 1
The name "Dec 13 2021 12:00AM" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119832
gerzzog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, готово!
Корректный код:

Код: sql
1.
[SET @sql_str = 'alter table #tmpBusicasapodnyam1 add constraint df_datecurra default '''  + cast(@DateRange as VARCHAR(MAX)) + '''  for datecurra'



Всем большое спасибо за помощь!
...
Рейтинг: 0 / 0
Ошибка в ALTER TABLE
    #40119892
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerzzog
Все, готово!
Корректный код:

Код: sql
1.
[SET @sql_str = 'alter table #tmpBusicasapodnyam1 add constraint df_datecurra default '''  + cast(@DateRange as VARCHAR(MAX)) + '''  for datecurra'



Всем большое спасибо за помощь!


Быстро, четко сработал

Это нормально:
Код: sql
1.
cast(@DateRange as VARCHAR(MAX))
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка в ALTER TABLE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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