Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Есть ли в SQL оператор «кроме»?


Страницы:   1 2

Kolan ©   (2007-12-07 10:09:00) 

Здравствуйте,

Если в табл2 есть поля ID, FIO, ST_VR

Можно ли сделать такой INSERT?

INSERT INTO  <табл>
 SELECT <все кроме  ID> FROM <табл2>


DiamondShark   (2007-12-10 16:56:00) [1]


> Kolan ©   (07.12.07 10:55) [8]
> > лентяй вы батенька
>
> Их там за малым не 100 штук.

Так в Квери Аналийзере скрипты зачем дадены?


Павел Калугин   (2007-12-10 14:56:00) [2]

да, если это список полей то тоже можно
тогда в значении по умолчанию таблицы должна m,snm функция отвечающая за формирование нового идентификатора

если ID типа UNIQUEIDENTIFIER то есть функция NewId()


Павел Калугин   (2007-12-10 14:51:00) [3]


> Johnmen ©   (07.12.07 10:44) [5]

Если все фио слепить в строку то можно:) только строки должно хватить

declare @fio varchar (8000)
set @fio=''
select @fio=@fio+isnull(convert(varchar,id)+'; ','')
from t_partners
order by partner_short_name
select @fio as str_fio

результата

30000000000203963; 30000000000336676; 30000000000520196; 30000000000707237; 30000000023210162; 30000000023210322; 11535000000218701; ... пропущено ... 30000000000219956; 30000000000220780; 30000000000220464; 3*

* - от тут разм5ер строки скончался

SELECT <все кроме  ID> FROM <табл2>

where ID not in (список через запятую)

или

where ID not in (select ID from where)


ЮЮ   (2007-12-10 10:35:00) [4]

SELECT <все кроме  ID> FROM <табл2>

Сорри, толоко сейчас врубился, что  <все кроме  ID> означает список полей, а не условия отбора.


ЮЮ   (2007-12-10 08:08:00) [5]

> [цитата]
>
> [21] Anatoly Podgoretsky ©   (10.12.07 07:46)
> > ЮЮ  (10.12.2007 03:24:20)  [20]
>
> LEFT убери и условие не нужно, кроме того работать будет
> быстрее.


И получу список тех, которые УЖЕ ЕСТЬ в <табл2>, а надо тех, которых ЕЩЁ НЕТ

>кроме того работать будет быстрее.
кроме того, что неправильно?
причем не обязательно. Очень часть с LEFT LOIN работает быстрее, чем INNER JOIN


Anatoly Podgoretsky   (2007-12-10 07:46:00) [6]

> ЮЮ  (10.12.2007 03:24:20)  [20]

LEFT убери и условие не нужно, кроме того работать будет быстрее.


ЮЮ   (2007-12-10 03:24:00) [7]

INSERT INTO  <табл>
 SELECT t.*
 FROM <табл> t
 LEFT JOIN <табл2> t2 ON t1.Id = t2.Id
 WHERE t2.Id IS NULL /* это, собственно, и означает, что в <табл2> нет записи с соответстыующим Id */


megabyte   (2007-12-07 17:15:00) [8]

Выборка из табличной функции: select * from function
Выборка из скалярной функции в переменную: exec @var = function

select @var



> SELECT dbo.GetNewID('SL_DOCT', 'ID', 'FIO', '_Черняев В.
> А.')

У тебя же, судя по объявлению функции, она скалярная, а ты к ней обращаешься как к табличной...


Stas   (2007-12-07 13:32:00) [9]

Kolan ©   (07.12.07 10:09)  
У MSSQL есть Query Analizer, который скрипты генерит.


Kolan   (2007-12-07 12:11:00) [10]

> Напиши генерилку ДМЛ для таблицы. На делфи — минут 30 убить.

Да есть у меня, сгенерил уже. Просто мне для разных таблиц. Ну да ладно вроде разобрался…


ANB   (2007-12-07 11:43:00) [11]

Напиши генерилку ДМЛ для таблицы. На делфи - минут 30 убить.
В лягушке для оракла есть встроенная, возможно, есть и в аналайзере.
Генерить на лету есть смысл, если эти действия нужно делать много раз для разных таблиц или если идет активная разработка и состав полей таблицы часто меняется.


Правильный_Вася   (2007-12-07 11:37:00) [12]


> Их там за малым не 100 штук.

а что, copy-paste отменили?


Kolan   (2007-12-07 11:15:00) [13]


> Хватит кусочничать, покажи полностью код

Весь и показываю:

Функция:
CREATE FUNCTION GetNewID(@Table varchar(50),  
 @IDField varchar(50), @NameField varchar(50), @NameValue varchar(50))
RETURNS int
AS
BEGIN
 DECLARE @Result int;
 DECLARE @SQL varchar(300);
 SET @SQL = '(SELECT '+@IDField+' FROM '+@Table+' WHERE '+@NameField+' = '+@NameValue+');'
 SET EXECUTE @Result = @SQL;
RETURN (@Result)
END


Вызов:
SELECT dbo.GetNewID('SL_DOCT', 'ID', 'FIO', '_Черняев В.А.')


Skyle   (2007-12-07 11:13:00) [14]

Хватит кусочничать, покажи полностью код


Kolan   (2007-12-07 11:12:00) [15]

Вот ругается

SELECT dbo.GetNewID('SL_DOCT', 'ID', 'FIO', '_Черняев В.А.')

Could not locate entry in sysdatabases for database '(SELECT ID FROM SL_DOCT WHERE FIO = _Черняев В'. No entry found with that name. Make sure that the name is entered correctly.


Че это значит?


Skyle   (2007-12-07 11:10:00) [16]

Есть мнение что его просто нельзя в UDF запихивать ибо undeterministic


Kolan   (2007-12-07 11:06:00) [17]

Наверно так надо…
SET EXECUTE @Result = @SQL;


Kolan   (2007-12-07 11:04:00) [18]

Таак вот так ругается

CREATE FUNCTION GetNewID(@Table varchar(50),  
 @IDField varchar(50), @NameField varchar(50), @NameValue varchar(50))
RETURNS int
AS
BEGIN
 DECLARE @Result int;
 DECLARE @SQL varchar(300);
 SET @SQL = '(SELECT '+@IDField+' FROM '+@Table+' WHERE '+@NameField+' = '+@NameValue+');'
 /*SET @Result = */EXECUTE(@SQL);
RETURN (@Result)
END


, что «Invalid use of EXECUTE within a function»

А без комментариев просто incorrect syntax


Kolan   (2007-12-07 10:55:00) [19]

> лентяй вы батенька

Их там за малым не 100 штук.


Правильный_Вася   (2007-12-07 10:51:00) [20]


> > Только перечислять.Пипец, а их много… :(

лентяй вы батенька


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо