![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Есть ли в SQL оператор «кроме»?
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]
> > Только перечислять.Пипец, а их много… :(
лентяй вы батенька