Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обновить таблицу в Sql 2005  [new]
Ramis
Member

Откуда:
Сообщений: 94
Здравствуйте!
1.Не кто не подскажет как в запросе sql можно прописать обновление таблицы или БД?
2.Как в INSERTе можно вставить новое ID (int), использовать newid() мне не надо?
16 июл 09, 15:33    [7424722]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
1. Обновление данных в таблице выполняется инструкцией UPDATE.
2. И откуда должно браться значение для этого поля? Оно у Вас имеет свойство identity?
16 июл 09, 15:35    [7424735]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
Ramis
Member

Откуда:
Сообщений: 94
1.Мне не UPDATE требуется, а команда для просто обновления таблицы без изменений данных в таблицы!!!
2.Id у меня само генерируется в БД! и даже работает инсерт в аналайзере, а когда я использую скрипт через другу прогу id почему то не может сгенерироваться!!!
16 июл 09, 15:39    [7424770]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
а команда для просто обновления таблицы


Это что за "просто обновление" такое? Объясните!

автор
Id у меня само генерируется в БД!


Со свойством identity я угадал? Или нет?

автор
и даже работает инсерт в аналайзере,


И даже можете нам запрос показать?

автор
а когда я использую скрипт через другу прогу id почему то не может сгенерироваться!!!


И Вы смотрели с помощью профайлера, что за инструкцию эта "другая прога" отправляет на сервер и чем она отличается от той, которая "работает в аналайзере"?

Сообщение было отредактировано: 16 июл 09, 15:44
16 июл 09, 15:43    [7424813]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
Ramis
Member

Откуда:
Сообщений: 94
Да ID у меня Identity!
Вот скрипт который я вставляю в ISCRA Framework:

DECLARE @kolCur int, @ID_VedExam int, @ID_CRM int, @ID_BazObr int
DECLARE @MEDAL varchar(50),@FORM_OBUCH varchar(50), @Type_Obuch varchar(50),@VidIsp_Name varchar(50),@k int,@Key_Disciplines int
SET @k=0

  DECLARE CURS CURSOR
  LOCAL SCROLL STATIC FOR
  SELECT  VED_EXAM.ID_VedExam, CRM.ID_CRM, BazObr.ID_BazObr, VED_EXAM.Key_Disciplines
  FROM    DimItem INNER JOIN CIKL_OBUCH INNER JOIN VED_EXAM ON CIKL_OBUCH.ID_CIKL_OBUCH = VED_EXAM.Key_CIKL_OBUCH INNER JOIN
          BazObr ON CIKL_OBUCH.Key_pBazObr = BazObr.ID_BazObr ON DimItem.ID_Item = CIKL_OBUCH.Key_pFormObuch_Dim INNER JOIN
          DimItem AS DimItem_1 ON CIKL_OBUCH.Key_pTypeObuch_Dim = DimItem_1.ID_Item INNER JOIN VID_ISP ON VED_EXAM.Key_VidIsp = VID_ISP.ID_VidIsp INNER JOIN
          Periods INNER JOIN PROTOCOL INNER JOIN  PROTOCOLLINE ON PROTOCOL.ID_Protocol = PROTOCOLLINE.Key_Protocol INNER JOIN
          CRM ON PROTOCOLLINE.Key_CRM = CRM.ID_CRM ON Periods.ID_Periods = PROTOCOL.Key_Periods ON VED_EXAM.Key_CIKL_OBUCH = PROTOCOL.Key_CIKL_OBUCH
  WHERE   PROTOCOL.Key_Periods = 49/*:GOD */AND PROTOCOL.DOP_NABOR = 0/*:VID_NABORA*/ and VED_EXAM.Potok = 0 ORDER BY ID_CRM ASC
  OPEN CURS
  SET @KOLCUR = 1
  WHILE @KOLCUR <= @@CURSOR_ROWS
    BEGIN
      FETCH ABSOLUTE @KOLCUR FROM CURS INTO @ID_VedExam, @ID_CRM, @ID_BazObr, @Key_Disciplines
      IF (SELECT count(VED_EXAM_LINE.Key_CRM) FROM VED_EXAM INNER JOIN VED_EXAM_LINE ON VED_EXAM.ID_VedExam = VED_EXAM_LINE.Key_VED_EXAM 
          WHERE Key_CRM=@ID_CRM and VED_EXAM.Key_Disciplines=@Key_Disciplines)<=0
         BEGIN
			INSERT INTO VED_EXAM_LINE (Key_VED_EXAM,Key_CRM,Key_pBazObr,RezultIsp)
			VALUES (@ID_VedExam, @ID_CRM, @ID_BazObr,'')       
            SET @k = @k+1
         END  
      SET @KOLCUR = @KOLCUR + 1  
    END

   CLOSE CURS
   DEALLOCATE CURS

RAISERROR ('Добавлено %i абитуриентов! ', 16, 1,@k)


Сообщение было отредактировано: 16 июл 09, 16:04
16 июл 09, 15:55    [7424941]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Вот скрипт который я вставляю в ISCRA Framework:


И таблица с identity это VED_EXAM_LINE? Что в нем не работает? Зачем тут курсор вообще?
16 июл 09, 15:59    [7424975]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
Supra93
Member

Откуда:
Сообщений: 8174
пользуйтесь тэгами, глаза чуть не поломал
DECLARE @kolCur int, @ID_VedExam int, @ID_CRM int, @ID_BazObr int
DECLARE @MEDAL varchar(50),@FORM_OBUCH varchar(50), @Type_Obuch varchar(50),@VidIsp_Name varchar(50),@k int,@Key_Disciplines int
SET @k=0

DECLARE CURS CURSOR
LOCAL SCROLL STATIC FOR
SELECT VED_EXAM.ID_VedExam, CRM.ID_CRM, BazObr.ID_BazObr, VED_EXAM.Key_Disciplines
FROM DimItem 
INNER JOIN CIKL_OBUCH 
INNER JOIN VED_EXAM ON CIKL_OBUCH.ID_CIKL_OBUCH = VED_EXAM.Key_CIKL_OBUCH 
INNER JOIN BazObr ON CIKL_OBUCH.Key_pBazObr = BazObr.ID_BazObr ON DimItem.ID_Item = CIKL_OBUCH.Key_pFormObuch_Dim 
INNER JOIN DimItem AS DimItem_1 ON CIKL_OBUCH.Key_pTypeObuch_Dim = DimItem_1.ID_Item 
INNER JOIN VID_ISP ON VED_EXAM.Key_VidIsp = VID_ISP.ID_VidIsp 
INNER JOIN Periods 
INNER JOIN PROTOCOL INNER JOIN PROTOCOLLINE ON PROTOCOL.ID_Protocol = PROTOCOLLINE.Key_Protocol 
INNER JOIN CRM ON PROTOCOLLINE.Key_CRM = CRM.ID_CRM ON Periods.ID_Periods = PROTOCOL.Key_Periods ON VED_EXAM.Key_CIKL_OBUCH = PROTOCOL.Key_CIKL_OBUCH
WHERE PROTOCOL.Key_Periods = 49/*:GOD */AND PROTOCOL.DOP_NABOR = 0/*:VID_NABORA*/ and VED_EXAM.Potok = 0 ORDER BY ID_CRM ASC

OPEN CURS
SET @KOLCUR = 1

WHILE @KOLCUR <= @@CURSOR_ROWS
BEGIN
FETCH ABSOLUTE @KOLCUR FROM CURS INTO @ID_VedExam, @ID_CRM, @ID_BazObr, @Key_Disciplines
IF (SELECT count(VED_EXAM_LINE.Key_CRM) FROM VED_EXAM INNER JOIN VED_EXAM_LINE ON VED_EXAM.ID_VedExam = VED_EXAM_LINE.Key_VED_EXAM 
WHERE Key_CRM=@ID_CRM and VED_EXAM.Key_Disciplines=@Key_Disciplines)<=0
BEGIN
INSERT INTO VED_EXAM_LINE (Key_VED_EXAM,Key_CRM,Key_pBazObr,RezultIsp)
VALUES (@ID_VedExam, @ID_CRM, @ID_BazObr,'') 
SET @k = @k+1
END 
SET @KOLCUR = @KOLCUR + 1 
END

CLOSE CURS
DEALLOCATE CURS

RAISERROR ('Добавлено %i абитуриентов! ', 16, 1,@k)


Можно увидеть структуру VED_EXAM_LINE ??
16 июл 09, 16:04    [7425016]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
Ramis
Member

Откуда:
Сообщений: 94
[dbo].[VED_EXAM_LINE](
[ID_VED_EXAM_LINE] [int] IDENTITY(1,1) NOT NULL,
[Key_VED_EXAM] [int] NULL,
[Key_CRM] [int] NULL,
[Key_pBazObr] [int] NULL,
[RezultIsp] [varchar](50) NULL)
16 июл 09, 16:08    [7425058]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
Козьма Прутков
Member

Откуда: Москва
Сообщений: 186
В других схемах (у пользователей, если 2000) нет случайно таблицы VED_EXAM_LINE? А то в описании-то таблицы указано dbo, а в INSERT'е нет.
Индексов, констрейнов, триггеров на этой таблице нет никаких?
Приведите полное сообщение об ошибке, которое возвращает SQL: вдруг не в insert'е дело.

------------
Чем сложнее решение задачи, тем больше вероятность, что оно неправильное
16 июл 09, 16:17    [7425145]     Ответить | Цитировать Сообщить модератору
 Re: Обновить таблицу в Sql 2005  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Вот этот вот кусок

автор
RAISERROR ('Добавлено %i абитуриентов! ', 16, 1,@k)


с 16 уровнем серьезности что тут делает?
16 июл 09, 16:19    [7425168]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить