Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2012, 18:32   #1
Jrcfyf
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
Вопрос Хранимая процедура

Есть вот такая ХП:
Код:
/****** Object:  StoredProcedure [dbo].[Fix_diplom]    Script Date: 02/14/2012 16:14:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER PROCEDURE [dbo].[Fix_diplom] (@FixDate AS smalldatetime)
AS
declare @idw int, @ido int, @isd int, @uz nvarchar(512), @vo int, @kpd int, @iuz int, @idsp int, @numdip nvarchar(50) 
declare @ko int, @ku int, @dz smalldatetime, @dd smalldatetime


select @idw = d1.[idWorker],@ido = d1.[idObrazov], @isd = d1.[idSecDip],@uz = d1.[UCHZAV],@vo = d1.[Vidobuch],
       @kpd = d1.[Kvalpodip], @numdip = d1.[NumDiplom], @iuz = d1.[idUchZav],@idsp = d1.[IDSP], 
       @ko = d1.[KodOtd],@ku = d1.[KODUS], @dz = d1.[DATAZAPIS],
       @dd = d1.[DateDiplom] FROM [dbo].[DIPLOM] D1
                  INNER JOIN(
                    SELECT D2.IDWORKER,MAX(D2.idObrazov) AS idObrazov FROM DIPLOM D2
                      WHERE D2.DATAZAPIS<=@FixDate GROUP BY D2.IDWORKER) D3
                    ON D1.IDWORKER=D3.IDWORKER AND D1.idObrazov=D3.idObrazov
                 WHERE D1.idWorker IN (
                    SELECT IDWORKER from kadr where (isnull(prikazdateuv,0)<@FixDate) and prikazuv='0' group by IDWORKER) 
                  AND D1.MAINEDUC = 0 
                GROUP BY D1.idSecDip,D1.idWorker, D1.idObrazov,d1.UCHZAV, d1.Vidobuch,
                  d1.Kvalpodip,d1.idUchZav,d1.IDSP,d1.KodOtd,d1.KODUS,d1.DATAZAPIS,
                  d1.DateDiplom,d1.Numdiplom  

--В этом блоке выбрали данные выдаёт 1 rows
INSERT INTO [dbo].[DIPLOM_ARH](
              [idWorker]
             ,[idObrazov]
             ,[idSecDip]
             ,[UCHZAV]
             ,[Vidobuch]
             ,[Kvalpodip]
             ,[NumDiplom]
             ,[idUchZav]
             ,[IDSP]
             ,[KodOtd]
             ,[KODUS]
             ,[DATAZAPIS]
	     ,[DateDiplom]
             ,[FixDate])
 VALUES   (@idw, @ido, @isd, @uz, @vo, @kpd, @iuz, @idsp, @numdip, @ko, @ku, @dz, @dd, @FixDate)
GO
--в этом блоке вставляем данные в таблицу, тоже вроде всё в порядке
Вопрос: почему конечная таблица не заполнена?
Jrcfyf вне форума Ответить с цитированием
Старый 14.02.2012, 18:45   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Тело процедуры в Begin End берется
2. SELECT может вернуть более одной записи - куда будут данные писаться?
3. INSERT независим от SELECT и создаст только одну запись
4. Примерно INSERT INTO DIPLOM_ARH SELECT ...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.02.2012 в 18:47.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранимая процедура Ellkat SQL, базы данных 0 22.05.2011 17:02
Хранимая процедура LizaVeta БД в Delphi 1 15.05.2010 10:42
Хранимая процедура. Cartman18 БД в Delphi 21 08.05.2010 18:56
хранимая процедура serg369 SQL, базы данных 4 07.02.2010 14:33
Хранимая процедура. nimf БД в Delphi 2 22.04.2008 13:16