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

Откуда: Россия, Ростовская область
Сообщений: 50
Здравствуйте, помогите пожалуйста разобраться в чем дело :( Я создаю хранимую процедуру для отображения сведений о гражданах. Для этого приходится создать еще одну процедуру и функцию, которые вложены друг в друга, но при проверке кода все время выдается сообщение об ошибке.
Это вид главной процедуры:

 CREATE PROCEDURE pPeopleView (@Person varchar (50) = NULL)

AS
DECLARE @FullIndex varchar(6), @PersonNumber int, @CodeCity int, @Address varchar(4), 
  @City varchar(4), @CodeRegion int, @Region varchar(4), @CityName varchar(20) 

DECLARE cPeople CURSOR GLOBAL SCROLL STATIC FOR
SELECT НомерКонтрагента.Контрагенты, Город.Контрагенты, ИндексАдреса.Контрагенты
  FROM Контрагенты
WHERE НомерОрганизации.Контрагенты IS NULL AND ТипЛица.Контрагенты=true

OPEN GLOBAL cPeople
FETCH ABSOLUTE 1 FROM cPeople
INTO @PersonNumber, @CodeCity, @Address

EXEC pIndexPhone @CodeCity, @Address, @FullIndex OUTPUT, @CityName OUTPUT

SELECT Фамилия.Контрагенты AS Фамилия, Имя.Контрагенты AS Имя, Отчество.Контрагенты AS Отчество,
@FullIndex + ' ' + @CityName +' ' + Адрес.Контрагенты AS Адрес, Телефон.Контрагенты AS Телефон 
  FROM Контрагенты
 WHERE НомерОрганизации.Контрагенты IS NULL AND ТипЛица.Контрагенты=true
CLOSE GLOBAL cPeople
DEALLOCATE GLOBAL cPeople
GO

Вид процедуры pIndexPhone:

CREATE PROCEDURE pIndexPeople(@CodeCity int, @Address varchar(4), @FullIndex varchar(6)=NULL OUTPUT,
  @CityName varchar(20)=0 OUTPUT)
AS

DECLARE @City varchar(4), @CodeRegion int, @Region varchar(4)

SELECT @City=ИндексГорода.Города FROM Города WHERE НомерГорода.Города=@CodeCity
SELECT @CityName=Название.Города FROM Города WHERE НомерГорода.Города=@CodeCity
SELECT @CodeRegion=Регион.Города FROM Города WHERE НомерГорода.Города=@CodeCity
SELECT @Region=ИндексРегиона.Регионы FROM Регионы WHERE КодРегиона=@CodeRegion

SET @FullIndex=dbo.fIndex (@Region,@City, @Address)
RETURN
GO

И, наконец, вид функции fIndex:

CREATE FUNCTION dbo.fIndex (@region varchar(4), @city varchar(4),@area varchar(4))
RETURNS varchar(10)
AS
BEGIN
  RETURN @region + @city + @area 
END
GO


Из всего этого одна только функция и не выдает ошибку (((( первые же 2 процедуры выдают одинаковые ошибки вида:

1:

Сообщение 4104, уровень 16, состояние 1, процедура pPeopleView, строка 9
Не удалось привязать составной идентификатор "НомерКонтрагента.Контрагенты".
Сообщение 4104, уровень 16, состояние 1, процедура pPeopleView, строка 9
Не удалось привязать составной идентификатор "Город.Контрагенты".
Сообщение 4104, уровень 16, состояние 1, процедура pPeopleView, строка 9
Не удалось привязать составной идентификатор "ИндексАдреса.Контрагенты".
Сообщение 4104, уровень 16, состояние 1, процедура pPeopleView, строка 19
Не удалось привязать составной идентификатор "Фамилия.Контрагенты".
Сообщение 4104, уровень 16, состояние 1, процедура pPeopleView, строка 19
Не удалось привязать составной идентификатор "Имя.Контрагенты".
Сообщение 4104, уровень 16, состояние 1, процедура pPeopleView, строка 19
Не удалось привязать составной идентификатор "Отчество.Контрагенты".
Сообщение 4104, уровень 16, состояние 1, процедура pPeopleView, строка 19
Не удалось привязать составной идентификатор "Адрес.Контрагенты".
Сообщение 4104, уровень 16, состояние 1, процедура pPeopleView, строка 19
Не удалось привязать составной идентификатор "Телефон.Контрагенты". 


2:

 
Сообщение 4104, уровень 16, состояние 1, процедура pIndexPeople, строка 7
Не удалось привязать составной идентификатор "НомерГорода.Города".
Сообщение 4104, уровень 16, состояние 1, процедура pIndexPeople, строка 7
Не удалось привязать составной идентификатор "ИндексГорода.Города".
Сообщение 4104, уровень 16, состояние 1, процедура pIndexPeople, строка 8
Не удалось привязать составной идентификатор "НомерГорода.Города".
Сообщение 4104, уровень 16, состояние 1, процедура pIndexPeople, строка 8
Не удалось привязать составной идентификатор "Название.Города".
Сообщение 4104, уровень 16, состояние 1, процедура pIndexPeople, строка 9
Не удалось привязать составной идентификатор "НомерГорода.Города".
Сообщение 4104, уровень 16, состояние 1, процедура pIndexPeople, строка 9
Не удалось привязать составной идентификатор "Регион.Города".
Сообщение 4104, уровень 16, состояние 1, процедура pIndexPeople, строка 10
Не удалось привязать составной идентификатор "ИндексРегиона.Регионы".


Подскажите в чем дело...мучаюсь весь день и уже полночи ((((
4 май 09, 03:10    [7140659]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
SELECT @City=ИндексГорода.Города FROM Города WHERE НомерГорода.Города=@CodeCity
==>
SELECT @City=Города.ИндексГорода FROM Города WHERE Города.НомерГорода=@CodeCity
?

-------------------------
There’s no silver bullet!
4 май 09, 03:38    [7140668]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Jenny Wren
Member

Откуда: Россия, Ростовская область
Сообщений: 50
Вот что значит написать на форуме...кажется я нашла ошибку!!! Довольно смешную....

Надо писать везде не
SELECT @City=ИндексГорода.Города FROM Города WHERE НомерГорода.Города=@CodeCity
а так:
SELECT @City=ИндексГорода FROM Города WHERE НомерГорода=@CodeCity

Теперь осталось подкорректировать остальные недочеты в этих процедурах...
Всем спасибо!
4 май 09, 04:12    [7140672]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Jenny Wren
Member

Откуда: Россия, Ростовская область
Сообщений: 50
Еще одна проблемка....я исправила первую и вторую процедуры, сейчас они имеют вид:
1я:
CREATE PROCEDURE pPeopleView (@Person varchar (50) = NULL)

AS
DECLARE @FullIndex varchar(6), @PersonNumber int, @CodeCity int, @Address varchar(4), 
  @City varchar(4), @CodeRegion int, @Region varchar(4), @CityName varchar(20), @I int,
  @AllNotes int 

DECLARE cPeople CURSOR LOCAL SCROLL STATIC FOR
SELECT НомерКонтрагента, Город, ИндексАдреса
  FROM Контрагенты
WHERE НомерОрганизации IS NULL 

OPEN cPeople
  FETCH ABSOLUTE 1 FROM cPeople
  INTO @PersonNumber, @CodeCity, @Address
  EXEC pIndexPeople @CodeCity, @Address, @FullIndex OUTPUT, @CityName OUTPUT
  SELECT Фамилия AS Фамилия, Имя AS Имя, Отчество AS Отчество,
    @FullIndex + ' ' + @CityName +' ' + Адрес AS Адрес, Телефон AS Телефон 
  FROM Контрагенты
  WHERE НомерОрганизации IS NULL 
CLOSE cPeople
DEALLOCATE cPeople
GO
и 2я:

CREATE PROCEDURE pIndexPeople(@CodeCity int, @Address varchar(4), @FullIndex varchar(6)=NULL OUTPUT,
  @CityName varchar(20)=0 OUTPUT)
AS

DECLARE @City varchar(4), @CodeRegion int, @Region varchar(4)

SELECT @City=ИндексГорода FROM Города WHERE НомерГорода=@CodeCity
SELECT @CityName=Название FROM Города WHERE НомерГорода=@CodeCity
SELECT @CodeRegion=Регион FROM Города WHERE НомерГорода=@CodeCity
SELECT @Region=ИндексРегиона FROM Регионы WHERE КодРегиона=@CodeRegion

SET @FullIndex=dbo.fIndex (@Region,@City, @Address)
RETURN
GO

Вопрос собственно в том, что мне выдаются данные...все работает...но индекс (результат работы 2й процедуры и 3й функции) собирается одинаковый, хотя должны получиться разные числа....а у меня в обоих строках результата одно и то же число. Вообщем 2я процедура запускается один раз видимо...или в нее передаются одинаковые параметры...подскажите, как исправить эту ошибку!
4 май 09, 04:42    [7140675]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
ReBooT
Member

Откуда:
Сообщений: 61
Два вопроса :
1. FETCH ABSOLUTE 1 и отсутствие цикла по выборке ни на какие мысли не наводят ?
2. Нафига такую выборку делать курсором ?
4 май 09, 07:54    [7140728]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Jenny Wren
И, наконец, вид функции fIndex:

CREATE FUNCTION dbo.fIndex (@region varchar(4), @city varchar(4),@area varchar(4))
RETURNS varchar(10)
AS
BEGIN
  RETURN @region + @city + @area 
END
GO
А если и @region, и @city, и @area будут состоять из четырёх символов, что вернёт функция?
Могу ошибаться, но 4+4+4=12 и 12>10
4 май 09, 09:14    [7140838]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
А ещё мне непонятно, нафига вообще такая функция? Для тормоза, что ли? Почему не
SET @FullIndex=@Region+@City+@Address
?
4 май 09, 09:25    [7140860]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Jenny Wren
Member

Откуда: Россия, Ростовская область
Сообщений: 50
Отвечаю по порядку

ReBoot

Два вопроса :
1. FETCH ABSOLUTE 1 и отсутствие цикла по выборке ни на какие мысли не наводят ?
2. Нафига такую выборку делать курсором ?


1.Насколько я понимаю, FETCH ABSOLUTE 1 значит перемещение курсора на следующую запись, пробовала создать цикл, тогда результаты выводятся по количеству строк таблицы, т.е. мне вывелось по 2 строки 5 раз!
2.А чем посоветуете делать, если не курсором? Мне только он пришел на ум...

iap

А если и @region, и @city, и @area будут состоять из четырёх символов, что вернёт функция?
Могу ошибаться, но 4+4+4=12 и 12>10


У меня собирается обычный почтовый индекс вида 346790 к примеру, т.е. везде по 2 цифры по-любому...в редких случаях, таких как Москва и Санкт-Петербург, в "регионе" вообще нет цифр, зато в "сити" их будет 4, за пределы я никогда не выхожу

iap

А ещё мне непонятно, нафига вообще такая функция? Для тормоза, что ли? Почему не

SET @FullIndex=@Region+@City+@Address
?


Насчет этого я согласна, усложнила где это не нужно.....
Спасибо за комментарии, но процедуры правильно до сих пор не работают....может есть еще идеи? :(
4 май 09, 13:40    [7142346]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Jenny Wren

2.А чем посоветуете делать, если не курсором? Мне только он пришел на ум...

А кто объяснит, что вы вообще пытаетесь сделать ?
4 май 09, 13:44    [7142378]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Jenny Wren
1.Насколько я понимаю, FETCH ABSOLUTE 1 значит перемещение курсора на следующую запись
Неправильно понимаете. Это позиционирование курсора на первой записи от начала. Если на первую запись от текущей записи, то это было бы RELATIVE 1
Если просто на следующую, то NEXT и т.д.
Обычно всё это происходит в цикле (где у Вас цикл?!). SCROLL CURSOR обычно избыточен (только для него можно применять ABSOLUTE, RELATIVE, FIRST, LAST, PREVIOUS и т.д.).

А в целом можно сказать, что Вы не знаете, что такое курсор, не умеете с ним обращаться, а самое главное - это Вам вообще не нужно и даже очень вредно!
Поскорее выбросьте его подальше!

И скалярными пользовательскими функциями не увлекайтесь.
4 май 09, 14:06    [7142574]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
ReBooT
Member

Откуда:
Сообщений: 61
+1
4 май 09, 19:18    [7144576]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Если нужно прочитать несколько значений в переменные из одной строки данных, не нужен курсор:
select
    @Var1 = field1
    @Var2 = filed2
    @Var3 = field3+filed4
from Table
where field_if = @ID
Сам в "детстве" по незнанию для этого курсоры использовал. ;)
4 май 09, 22:05    [7144935]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Jenny Wren
Member

Откуда: Россия, Ростовская область
Сообщений: 50
Спасибо за критику...и за советы...я убрала курсор и сделала по типу, как подсказал
DeColo®es

Если нужно прочитать несколько значений в переменные из одной строки данных, не нужен курсор:

select
@Var1 = field1
@Var2 = filed2
@Var3 = field3+filed4
from Table
where field_if = @ID

Сам в "детстве" по незнанию для этого курсоры использовал. ;)


Но проблемы это мои не решило...весь день штудировала "Библию SQL" Нильсена, но так и не смогла придумать как сделать так, чтобы результаты вышеупомянутого СЕЛЕКТ обрабатывались процедурой №2 и выводились корректно :(
5 май 09, 01:45    [7145332]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Jenny Wren

Но проблемы это мои не решило...весь день штудировала "Библию SQL" Нильсена, но так и не смогла придумать как сделать так, чтобы результаты вышеупомянутого СЕЛЕКТ обрабатывались процедурой №2 и выводились корректно :(

Вы можете внятно и полностью описать задачу, которую вы решаете ?
А то у вас с каждым сообщением открываются новые факты
Зачем вызывать процедуру для каждой записи запроса ?
5 май 09, 10:53    [7146206]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
vino
Member

Откуда:
Сообщений: 1191
Jenny Wren
Спасибо за критику...и за советы...я убрала курсор и сделала по типу, как подсказал
DeColo®es

Если нужно прочитать несколько значений в переменные из одной строки данных, не нужен курсор:

select
@Var1 = field1
@Var2 = filed2
@Var3 = field3+filed4
from Table
where field_if = @ID

Сам в "детстве" по незнанию для этого курсоры использовал. ;)


Но проблемы это мои не решило...весь день штудировала "Библию SQL" Нильсена, но так и не смогла придумать как сделать так, чтобы результаты вышеупомянутого СЕЛЕКТ обрабатывались процедурой №2 и выводились корректно :(

На самом деле Вами показан только некорректный код, без входных и выходных данных. Откуда же нам знать, что именно Вы хотите сделать?
Можно только посоветовать дальнейшее изучение сначала SQL, затем TSQL...
Посмотрите, например, предположительный набросок аналогичного списка сведений о гражданах:
CREATE PROCEDURE pPeopleView (@Person varchar (50) = NULL)
AS
DECLARE @FullIndex varchar(6), @PersonNumber int, @CodeCity int, @Address varchar(4), 
  @City varchar(4), @CodeRegion int, @Region varchar(4), @CityName varchar(20) 

SELECT НомерКонтрагента, Город, ИндексАдреса
  FROM Контрагенты
WHERE НомерОрганизации IS NULL 

  INTO @PersonNumber, @CodeCity, @Address
  EXEC pIndexPeople @CodeCity, @Address, @FullIndex OUTPUT, @CityName OUTPUT
  SELECT Фамилия, Имя, Отчество,
  ( SELECT TOP(1) -- первая подходящая по условию строка
      (SELECT TOP(1) Регионы.ИндексРегиона FROM Регионы WHERE Регионы.КодРегиона=Города.Регион)
      + Города.ИндексГорода
      + Контрагенты.ИндексАдреса
      + ' ' + Города.Название
    FROM Города WHERE Города.НомерГорода=Контрагенты.Город)
    + ' ' + Контрагенты.Адрес) AS Адрес
  , Телефон
  FROM Контрагенты
  WHERE НомерОрганизации IS NULL -- AND Контрагенты.ТипЛица=true -- это больше не нужно?
GO
Не нужно бояться разумно вложенных селектов, а вот курсоры, пользовательские функции и процедуры очень ресурсоемкие и к ним обращаются только в крайних случаях! SQL - НЕ процедурно-ориентированный язык для управления множествами-данными
5 май 09, 11:31    [7146463]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Jenny Wren
Member

Откуда: Россия, Ростовская область
Сообщений: 50
Задача передо мной стоит вообще следующая: спроектировать базу данных согласно предметной области, написать возможные запросы к ней и потом создать приложение, которое кстати будет на С#. Все эти функции и процедуры я писала, чтобы вывести сведения о гражданах, необходимые пользователю БД.
Изначально почтовый индекс разбивается у меня на части, к примеру таблица Регионы выглядит так:

КодРегиона ИндексРегиона Название
1 14 Московская область
2 15 Ярославская область
.. .. ..


Таблица Города

НомерГорода Регион ИндексРегиона Название
.. .. .. ..
4 NULL 1300 Москва
5 1 00 Люберцы
.. .. .. ..


Далее у меня есть таблицы Граждане и Организации, каждая со своими специфичными полями. Обе эти таблицы связаны с таблицей Контрагенты, в которой хранятся одинаковые поля как для граждан, так и для организаций. Таблица Контрагенты выглядит так:

НомерКонтрагента Город НомерОрганизации НомерЗаявителя ТипЛица Фамилия Имя Отчество Адрес ИндексАдреса Телефон ...
1 77 NULL 1 TRUE Иванов Иван Иванович ул. Ленина д.5 00 225566..
2 5 9 NULL FALSE Петров Петр Петрович ул. Кирова д.123 07 235467..
.. .. .... .. .. .. .. .. .. .. ..


Я писала функции, чтобы они мне собрали части индекса из трех таблиц вышеупомянутых в обну и вывели все в одном столбце....это и все...

Не судите строго за ошибки, я можно сказать начинающая в этом деле, но очень хочу разобраться :)

Большое спасибо за
vino

CREATE PROCEDURE pPeopleView (@Person varchar (50) = NULL)
AS
DECLARE @FullIndex varchar(6), @PersonNumber int, @CodeCity int, @Address varchar(4),
@City varchar(4), @CodeRegion int, @Region varchar(4), @CityName varchar(20)

SELECT НомерКонтрагента, Город, ИндексАдреса
FROM Контрагенты
WHERE НомерОрганизации IS NULL

INTO @PersonNumber, @CodeCity, @Address
EXEC pIndexPeople @CodeCity, @Address, @FullIndex OUTPUT, @CityName OUTPUT
SELECT Фамилия, Имя, Отчество,
( SELECT TOP(1) -- первая подходящая по условию строка
(SELECT TOP(1) Регионы.ИндексРегиона FROM Регионы WHERE Регионы.КодРегиона=Города.Регион)
+ Города.ИндексГорода
+ Контрагенты.ИндексАдреса
+ ' ' + Города.Название
FROM Города WHERE Города.НомерГорода=Контрагенты.Город)
+ ' ' + Контрагенты.Адрес) AS Адрес
, Телефон
FROM Контрагенты
WHERE НомерОрганизации IS NULL -- AND Контрагенты.ТипЛица=true -- это больше не нужно?
GO

Не нужно бояться разумно вложенных селектов, а вот курсоры, пользовательские функции и процедуры очень ресурсоемкие и к ним обращаются только в крайних случаях! SQL - НЕ процедурно-ориентированный язык для управления множествами-данными


Я попробовала, вроде получается то, что я хотела...постараюсь разобраться в коде! Спасибо :)
5 май 09, 15:15    [7148323]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Jenny Wren
Member

Откуда: Россия, Ростовская область
Сообщений: 50
Кстати получить я хочу что-то вроде такого:

Фамилия Имя Отчество Адрес Телефон
Иванов Иван Иванович 346780 г. Такой-то ул. Победы д.4 234567
..........
5 май 09, 15:17    [7148339]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Jenny Wren

Я писала функции, чтобы они мне собрали части индекса из трех таблиц вышеупомянутых в обну и вывели все в одном столбце....это и все...

А почему вы процедуры называете функциями ?
5 май 09, 15:19    [7148350]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Jenny Wren
Member

Откуда: Россия, Ростовская область
Сообщений: 50
Извините, опечатка ((((( писала 2 процедуры и 1 функцию....
5 май 09, 17:57    [7149505]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Jenny Wren
Member

Откуда: Россия, Ростовская область
Сообщений: 50
Сказать что я в шоке, это ничего не сказать! Оказывается, написанное мною ранее, вообще полный бред...Все, что я хотела получить в результатах, решается всего одной процедурой!

CREATE PROCEDURE pPeopleView (@Person varchar (50) = NULL)
AS
SELECT Фамилия, Имя, Отчество,
 (SELECT 
    (SELECT  Регионы.ИндексРегиона FROM Регионы WHERE Регионы.КодРегиона=Города.Регион)
    + Города.ИндексГорода + Контрагенты.ИндексАдреса + ' ' + Города.Название
  FROM Города WHERE Города.НомерГорода=Контрагенты.Город )
    + ' ' + Контрагенты.Адрес AS Адрес
  , Телефон
  FROM Контрагенты
  WHERE НомерОрганизации IS NULL 
GO

А я понаписала....видимо форум это мое спасение! С такими способностями я тут буду частым гостем...

БОЛЬШОЕ СПАСИБО ВСЕМ ЗА ПОМОЩЬ!!!
6 май 09, 02:18    [7150602]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Silkwork
Guest
ALTER TRIGGER summa
ON flights
FOR UPDATE
AS
IF (flights.[№ рейса]=runs.[№ рейса] and flights.[Тип билета]='эконом')
begin
UPDATE flights
SET flights.[Общая сумма] = flights.[Количество покупаемых билетов]*runs.[Цена на билет эконом класса]
FROM flights AS flights INNER JOIN Inserted ON flights.[№ билета]=Inserted.[№ билета]
end


Msg 4104, Level 16, State 1, Procedure summa, Line 5
Не удалось привязать составной идентификатор "flights.№ рейса".
Msg 4104, Level 16, State 1, Procedure summa, Line 5
Не удалось привязать составной идентификатор "runs.№ рейса".
Msg 4104, Level 16, State 1, Procedure summa, Line 5
Не удалось привязать составной идентификатор "flights.Тип билета".
Msg 4104, Level 16, State 1, Procedure summa, Line 7
Не удалось привязать составной идентификатор "runs.Цена на билет эконом класса".
10 июн 09, 23:52    [7288062]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Silkwork
Guest
Помогите пожалуйста понять, почему возникают эти ошибки.
10 июн 09, 23:53    [7288063]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Silkwork
Помогите пожалуйста понять, почему возникают эти ошибки.
Потому, что вы наверное писали триггер из предположения, что он вызывается для каждой обновленной строки таблицы отдельно. Соответственно, напридумывали "свой" синтаксис.
Загляните в BOL и разберите примеры написания триггеров.
11 июн 09, 06:21    [7288211]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с процедурами в SQL Server 2005....Подскажите!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Silkwork
Помогите пожалуйста понять, почему возникают эти ошибки.

Потому что выражение flights.[№ рейса]=runs.[№ рейса] and flights.[Тип билета]='эконом' не имеет никакого смысла в терминах TSQL. К таблицам и полям в MSSQL так не обращаются
11 июн 09, 10:48    [7288900]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить