powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / T-SQL
2 сообщений из 2, страница 1 из 1
T-SQL
    #32029838
Demien
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, хелп! Запариваюсь окончательно.
Есть sp, начинающаяся примерно так:

CREATE PROCEDURE test (@tbl char(20)) AS
declare @sum1 float
declare @str char(200)

set @str='select @sum1=sum1 from '+@tbl+' where cod=1'
exec (@str)

Выдает ошибку типа "ты должен определить переменную @sum1".
Хорошо, думаю, сделаем иначе. Создадим таблицу serv_tbl, а потом ...

set @str='update serv_tbl set sum1=t1.sum1
from '+@tbl+' t1 where cod=1'
exec (@str)
select @sum1=sum1 from serv_tbl where (... и т.д.)

Гуд, проходит! Но...Если в предложении select есть суммирование значений полей, то вот такая хрень...
set @str='update serv_tbl set sum1=SUM(t1.sum1)
from '+@tbl+' t1 where field2=1'
exec (@str)
...не проходит. Говорит, мол, "update и групповые операции - понятия не совместимые, переделывай, дорогуша, свою процедуру, хе!"

Потом были безуспешные попытки через временные таблицы...
В общем никак, чево то..
Итак, вопрос: "Необходимо получить в переменную значение, которое является результатом суммирования некого числового поля
таблицы, имя которой передается в процедуру в качестве параметра".
Спасибо.
...
Рейтинг: 0 / 0
T-SQL
    #32029840
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\ndeclare @var1 int, @var2 varchar(100), @var3 varchar(100), @var4 int
declare @mysql nvarchar(4000)
set @mysql = 'set @var1 = @var1 + @var4; set @var2 = ''CCCC''; set @var3 = @var3 + ''dddd'''
set @var1 = 0
set @var2 = 'BBBB'
set @var3 = 'AAAA'
set @var4 = 10

select @var1, @var2, @var3
exec sp_executesql @mysql, N'@var1 int out, @var2 varchar(100) out, @var3 varchar(100) out, @var4 int', @var1 = @var1 out, @var2 = @var2 out, @var3 = @var3 out, @var4 = @var4
select @var1, @var2, @var3


http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=4156&Idle=365&Sort=0&Order=Descend&Page=0


Говорит, мол, "update и групповые операции - понятия не совместимые, переделывай, дорогуша, свою процедуру, хе!"

\ncreate table #temp1(f1 int, f2 int)
create table #temp2(f1 int, f2 int)

insert #temp1 values(1, 0)
insert #temp1 values(2, 0)

insert #temp2 values(1, 10)
insert #temp2 values(1, 5)
insert #temp2 values(2, 1)
insert #temp2 values(2, 2)

select * from #temp1

update a set f2 = (select sum(f2) from #temp2 b where b.f1 = a.f1)
from #temp1 a

select * from #temp1
drop table #temp1
drop table #temp2
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / T-SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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