Текущий архив: 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]> Только перечислять.
Пипец, а их много… :(
Еще вопрос.
А можно ли сделать так: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)
О, сойдет… Благодарю.
> Так точно нельзя (можно, но рез-т будет FIO FIO FIO …
> и так 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
, что «Invalid use of EXECUTE within a function»
А без комментариев просто incorrect syntax
← →
Kolan © (2007-12-07 11:06) [10]Наверно так надо…
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]> Напиши генерилку ДМЛ для таблицы. На делфи — минут 30 убить.
Да есть у меня, сгенерил уже. Просто мне для разных таблиц. Ну да ладно вроде разобрался…
← →
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.51 MB
Время: 0.069 c