Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.18;
Скачать: CL | DM;

Вниз

Есть ли в 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
15-1207063416
TStas
2008-04-01 19:23
2008.05.18
Как научиться писать СОМ интерфейсы?


11-1188735091
Виктор007
2007-09-02 16:11
2008.05.18
CollapseProcTable0.inc


3-1197027738
AlexeyMir
2007-12-07 14:42
2008.05.18
DBGridEh Combobox->Items


2-1208793359
Victor
2008-04-21 19:55
2008.05.18
работа с dos приложением


2-1208180999
harisma
2008-04-14 17:49
2008.05.18
Как убрать из заголовка формы кнопку