powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нестандартный select (exec @sql ...)
4 сообщений из 4, страница 1 из 1
Нестандартный select (exec @sql ...)
    #32018153
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые Господа.
Имеются два вопроса

create table Пример ( КодДвижения int identity (1, 1) not null primary key, КодОбъекта int , Количество decimal(19, 2) , Цена decimal(19, 2) , СтавкаНДС decimal(19, 2) , ТипСуммы varchar (50) ,
СуммаБНДС decimal(19, 2) , СуммаНДС decimal(19, 2) , СуммаСНДС decimal(19, 2) )
insert into Пример values ( 1 , 10 , 10 , 0.2 , 'СуммаБНДС*2' , 100.0 , 20.0 , 120.0 )
insert into Пример values ( 1 , 20 , 10 , 0.2 , 'СуммаНДС/2' , 200.0 , 40.0 , 240.0 )
insert into Пример values ( 1 , 30 , 10 , 0.2 , 'СуммаСНДС' , 300.0 , 60.0 , 360.0 )

Вопрос 1

Требуется получить :
КодДвижения Результат
1 200
2 20
3 360

Получается только с помощью курсора и exec , а желательно получить набор данных для последующей выборки (т.е. не create proc , а create function или select from openrowset)

Вопрос 2
Каким образом получить в select все поля таблицы в именах которых присутствует 'Сумма'

К этому вопросу даже не знаю как подступиться .

Заранее благодарен.

P.S. Таблица "Пример" примером и является ( т.е. только для примера и создана )
...
Рейтинг: 0 / 0
Нестандартный select (exec @sql ...)
    #32018182
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO
1. Если вы действительно хотите отказаться от курсора, то придется отказаться от хранения текста формулы как поля таблицы, потому что в SELECT нельзя реализовать макроподстановку
Мой вариант такой
\ncreate table #Пример ( КодДвижения int identity (1, 1) not null primary key, КодОбъекта int , Количество decimal(19, 2) , Цена decimal(19, 2) , СтавкаНДС decimal(19, 2) , ТипСуммы nvarchar (50) collate SQL_Latin1_General_CP1251_CI_AS,
СуммаБНДС decimal(19, 2) , СуммаНДС decimal(19, 2) , СуммаСНДС decimal(19, 2), ТипФормулы int )

insert into #Пример values ( 1 , 10 , 10 , 0.2 , N'СуммаБНДС*2' , 100.0 , 20.0 , 120.0, 1 )
insert into #Пример values ( 1 , 20 , 10 , 0.2 , N'СуммаНДС/2' , 200.0 , 40.0 , 240.0, 2 )
insert into #Пример values ( 1 , 30 , 10 , 0.2 , N'СуммаСНДС' , 300.0 , 60.0 , 360.0, 3 )

select *, case ТипФормулы when 1 then СуммаБНДС*2 when 2 then СуммаНДС/2 when 3 then СуммаСНДС else null end from #Пример
drop table #Пример

Вместо CASE ... END можно использовать и функцию.
...
Рейтинг: 0 / 0
Нестандартный select (exec @sql ...)
    #32018183
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2.
DECLARE @mysql nvarchar(4000), @delimiter char
SET @delimiter = ','

SELECT @mysql = COALESCE(@mysql + @delimiter, '') + COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Пример' AND COLUMN_NAME LIKE N'%Сумма%'
SET @mysql = N'SELECT ' + @mysql + N' FROM Пример'
exec(@mysql)
...
Рейтинг: 0 / 0
Нестандартный select (exec @sql ...)
    #32018203
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле можно и с помощью функции.
В функции же можно использовать xp_процедуры. Остаётся только написать xp_процедуру, которая делает примерно тоже что и sp_executesql ...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нестандартный select (exec @sql ...)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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