powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос с системными объектами
5 сообщений из 5, страница 1 из 1
Запрос с системными объектами
    #40066041
Дмитрий86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос на удаление передается в виде строки:

(переменная @a объявлена как варчар)

Код: plsql
1.
2.
3.
4.
5.
select  @a=    'delete from '+ s.name + '.' + t.name + ' where ' + c.name + ' >= ''' + convert(varchar(20), @datefrom, 104) 
from sys.tables t
inner join sys.schemas s on t.schema_id = s.schema_id
inner join sys.columns c on c.object_id = t.object_id and c.name = 'tDate'
where s.name + '.' + t.name = 'get.t_Period'



Но проблема в том, что поле tDate в таблице t_Period целого типа int, я при вызове процедуры на удаление, данные не удаляются из этой табл.
Есть 2 пути решения этой проблемы:
1) Закастить поле tDate в таблице на варчар, потому что происходит конверт вводимой даты на варчар:
Код: sql
1.
convert(varchar(20), @datefrom, 104) 


2) Если возможно переписать запрос так, чтобы не менять тип поля в таблице, но запрос delete надо передавать в виде строки

Может еще предложите варианты решения, буду рад за помощь! Спасибо!
...
Рейтинг: 0 / 0
Запрос с системными объектами
    #40066063
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий86

Может еще предложите варианты решения, буду рад за помощь! Спасибо!



анализировать тип данных?
Код: sql
1.
2.
3.
4.
5.
select  @a='delete from '+ s.name + '.' + t.name + ' where ' + c.name + ' >= ' + iif(c.system_type_id in (56),convert(varchar(20), @datefrom, 112),''''+convert(varchar(20), @datefrom, 104)+'''')  
from sys.tables t
inner join sys.schemas s on t.schema_id = s.schema_id
inner join sys.columns c on c.object_id = t.object_id and c.name = 'tDate'
where s.name + '.' + t.name = 'get.t_Period'

...
Рейтинг: 0 / 0
Запрос с системными объектами
    #40066090
AlexDv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий86,

Код: sql
1.
2.
3.
4.
select  @a=    'delete from '+ s.name + '.' + t.name + ' where ' + c.name + ' >=  ''convert(varchar(20), @datefrom, 104)'' from sys.tables t
inner join sys.schemas s on t.schema_id = s.schema_id
inner join sys.columns c on c.object_id = t.object_id and c.name = tDate
where ' + s.name + '.' + t.name + '= get.t_Period'
...
Рейтинг: 0 / 0
Запрос с системными объектами
    #40066132
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий86,

напишите для таблицы t_Period отдельный запрос. Лучше же избавиться от такого решения.
...
Рейтинг: 0 / 0
Запрос с системными объектами
    #40066138
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий86,

а нафига вы извращаетесь с метаданными если у вас связка sys.tables + sys.schemas + sys.columns вернет все равно одну строку из за ваших предикатов?

предложу банальное:

Код: sql
1.
declare @a varchar(4000) = formatmessage(N'delete from [get].[t_Period] where [tDate] >= %s', quotename(convert(varchar, @datefrom, 112), char(39)));
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос с системными объектами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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