Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
Kolan ©   (2007-12-07 10:09) [0]

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

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

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

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


 
Kolan ©   (2007-12-07 10:21) [1]

Забыл, речь о MS SQL Server 2000


 
Johnmen ©   (2007-12-07 10:26) [2]

Нет. Только перечислять.


 
Kolan ©   (2007-12-07 10:36) [3]

> Только перечислять.

Пипец, а их много&#133 :(

Еще вопрос.

А можно ли сделать так:

DECLARE @FieldName varchar(10);

SET @FieldName = "FIO";

SELECT @FieldName FROM <table>



То есть, чтобы выделеная строка была эквивалентна
SELECT FIO FROM <table>

?


 
Skyle ©   (2007-12-07 10:42) [4]


> Kolan ©   (07.12.07 10:36) [3]

Так нельзя, но можно вот так

DECLARE
@SQL varchar(1024)

SET @SQL = "SELECT " + @FieldName + " FROM Table"
exec(@SQL)


 
Johnmen ©   (2007-12-07 10:44) [5]

Так точно нельзя (можно, но рез-т будет FIO FIO FIO ... и так count(*) раз :)), т.к. это макроподстановка.
Как подставлять, и можно ли не скажу. Возможно, надо почитать BOL.


 
Kolan ©   (2007-12-07 10:49) [6]

> SET @SQL = "SELECT " + @FieldName + " FROM Table"
> exec(@SQL)

О, сойдет&#133 Благодарю.


> Так точно нельзя (можно, но рез-т будет FIO FIO FIO &#133
> и так count(*) раз :)), т.к. это макроподстановка.

Ну да это я понимаю.


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


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

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


 
Kolan ©   (2007-12-07 10:55) [8]

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

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


 
Kolan ©   (2007-12-07 11:04) [9]

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

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


, что &laquo;Invalid use of EXECUTE within a function&raquo;

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


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

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


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

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


 
Kolan ©   (2007-12-07 11:12) [12]

Вот ругается

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:13) [13]

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


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


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

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

Функция:
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", "_Черняев В.А.")


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


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

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


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

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


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

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

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


 
Stas ©   (2007-12-07 13:32) [18]

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


 
megabyte ©   (2007-12-07 17:15) [19]

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

select @var



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

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


 
ЮЮ ©   (2007-12-10 03:24) [20]

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


 
Anatoly Podgoretsky ©   (2007-12-10 07:46) [21]

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

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


 
ЮЮ ©   (2007-12-10 08:08) [22]

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


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

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


 
ЮЮ ©   (2007-12-10 10:35) [23]

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

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


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


> 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 14:56) [25]

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

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


 
DiamondShark ©   (2007-12-10 16:56) [26]


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

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.056 c
2-1208508202
umbra
2008-04-18 12:43
2008.05.18
как запихнуть данные в базу? :)


3-1197827256
Kley
2007-12-16 20:47
2008.05.18
Возврат товара


2-1208240580
francuz_diletant
2008-04-15 10:23
2008.05.18
Перехват клавиши


6-1185251532
Inearthed
2007-07-24 08:32
2008.05.18
Продолжение пересылки файлов на FTP после обрыва связи


2-1208333700
webpauk
2008-04-16 12:15
2008.05.18
MdiChild (Close, Count)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский