Forum Webscript.Ru

Общие => Базы данных => Тема начата: Xander от 17 Февраля 2003, 00:40:41

Название: аналог x ? x : y в SQL а также русские буквы и LIKE в MS SQL
Отправлено: Xander от 17 Февраля 2003, 00:40:41
Возникла нужда в такой фунции как
id1 ? id1 : id2
или id1 or id2, т.е:
если id1!=0 возвращаем id1, иначе возвращаем id2. Подскажите, как такое сделать используя стандартные средства SQL (или специфичные для Transact-SQL, что в MS SQL)?.

И еще: при переходе с Access на MS SQL LIKE перестал искать без учета регистра. Никто не сталкивался с таким?
Название: аналог x ? x : y в SQL а также русские буквы и LIKE в MS SQL
Отправлено: ThE0ReTiC от 17 Февраля 2003, 10:39:20
Э... А почему нельза сделать UDF\'ку с запросом?
Конструкции типа IF...THEN T-SQL поддерживает (http://www.sql.ru)
Название: аналог x ? x : y в SQL а также русские буквы и LIKE в MS SQL
Отправлено: Xander от 17 Февраля 2003, 12:38:20
А можно линк на статью про UDF и прочий продвинутый SQL?
А то я в этом ни фига не понимаю еще...
Название: аналог x ? x : y в SQL а также русские буквы и LIKE в MS SQL
Отправлено: ThE0ReTiC от 17 Февраля 2003, 12:52:15
так это...
http://www.sql.ru ;)
yandex rules :beer:
http://www.interface.ru/faq/microsoft/sqlserver_faq1_1.htm
http://www.citforum.ru/database/articles/sqlservqa.shtml
Название: аналог x ? x : y в SQL а также русские буквы и LIKE в MS SQL
Отправлено: Xander от 17 Февраля 2003, 13:45:13
Ну вот сделал я такую хрень. Она конечно же не работает:
CREATE FUNCTION func ()
RETURNS @ExampleTable TABLE
(city_id int,
 city_name varchar(50),
 city_masterid int,
 city_mid int
)
AS
BEGIN
INSERT @ExampleTable VALUES (city_id,city_name,city_masterid)
SELECT * FROM shops_dictCities
IF city_masterid=0
   INSERT @ExampleTable VALUES (city_mid) city_id
ELSE
   INSERT @ExampleTable VALUES (city_mid) city_masterid
RETURN
END
GO

SELECT * FROM dbo.func()

Как сделать в IF правильное условие, добраться до нужного значения?
Название: аналог x ? x : y в SQL а также русские буквы и LIKE в MS SQL
Отправлено: Xander от 18 Февраля 2003, 15:06:00
Умные люди на http://sql.ru подсказали, что надо использовать CASE.
Запрос получился такой:
SELECT *, CASE MasterID WHEN 0 THEN ID ELSE MasterID END AS CompID FROM shops_dictCities;

Тема исчерпана.