powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как улучшить UDF?
7 сообщений из 7, страница 1 из 1
Как улучшить UDF?
    #39998762
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет
Речь идет о задании разработать UDF, которая проверяет одинаковы ли данные 2-х таблиц одной структуры

Id INT NOT NULL PRIMARY
Value1 INT NOT NULL
Value2 INT NULL

Если одинаковы, вернуть 0, иначе вернуть 1. Код должен быть как можно меньше. Если код состоит вообще из 1 строки, начинающейся с RETURN, такой ответ дает дополнительный баллы и заносится в зал славы кодеров-пенсионеров. Я написал что-то типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE FUNCTION MyFunction( @Table1 [dbo].[MyTableType] READONLY, @Table2 [dbo].[MyTableType] READONLY)
RETURNS INT
AS
BEGIN
    DECLARE @i1 int
    DECLARE @i2 int
	select @i1=count(*) from @Table1 where exists 
	(
		select * from @Table1 except select * from @Table2
	)   
	select @i2=count(*) from @Table2 where exists 
	(
		select * from @Table2 except select * from @Table1
	)
    RETURN CASE   
         WHEN @i1 + @i2 =  0 THEN 0  
         ELSE 1  
      END 
END



Но как написать одной строкой, ума не приложу. И вообще, возможно ли это?
...
Рейтинг: 0 / 0
Как улучшить UDF?
    #39998772
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
CREATE FUNCTION MyFunction( @Table1 [dbo].[MyTableType] READONLY, @Table2 [dbo].[MyTableType] READONLY)
RETURNS INT
AS
BEGIN
 return case when not exists((select * from @Table1 except select * from @Table2) union all (select * from @Table2 except select * from @Table1)) then 1 else 0 end;
END


ЗЫ: Если у таблиц нет ПК, то так делать нельзя.
...
Рейтинг: 0 / 0
Как улучшить UDF?
    #39998775
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov
одинаковы ли данные 2-х таблиц

Вы сравниваете данные или количество записей в таблицах?
В общем случае это не одно и то же.
...
Рейтинг: 0 / 0
Как улучшить UDF?
    #39998793
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE FUNCTION MyFunction( @Table1 [dbo].[MyTableType] READONLY, @Table2 [dbo].[MyTableType] READONLY)
RETURNS bit
AS
BEGIN
 return 
 iif( exists( select * from @Table1 except select * from @Table2 ) or exists( select * from @Table2 except select * from @Table1 ), 0, 1 );
END

CREATE FUNCTION MyFunction( @Table1 [dbo].[MyTableType] READONLY, @Table2 [dbo].[MyTableType] READONLY)
RETURNS bit
AS
BEGIN
 return 
 iif( exists( select * 
                from @Table1 as t1 
                     full outer join @Table2 as t2 on t1.id = t2.id 
                                                and t1.Value2 = t2.Value2 
                                                and exists( select t1.Value1 intersect select t2.Value1 ) 
                     where t1.id is null or t2.id is null 
            )
     , 1
     , 0
     )
END
...
Рейтинг: 0 / 0
Как улучшить UDF?
    #39998799
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные.
Мое понимание такое, что если при наличие одинаковых таблиц в одну из них добавляется строка с произвольными данными, они становятся разными. Но если просто дублируется последняя строка не внося разнообразия в данные - таблицы должны оставаться одинаковыми
...
Рейтинг: 0 / 0
Как улучшить UDF?
    #39998804
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov
Данные.
Мое понимание такое, что если при наличие одинаковых таблиц в одну из них добавляется строка с произвольными данными, они становятся разными. Но если просто дублируется последняя строка не внося разнообразия в данные - таблицы должны оставаться одинаковыми


Хм...?
Требую продолжения банкета!!!
Продублируйте, пожалуйста, строку с PRIMARY KEY.
...
Рейтинг: 0 / 0
Как улучшить UDF?
    #39998944
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov
Но если просто дублируется последняя строка не внося разнообразия в данные - таблицы должны оставаться одинаковыми
А если непоследняя?
Или, например, таблица состоит из 1000 одинаковых строк, и в неё внесли 1001-ую такую же?

Какие то у вас свои критерии одинаковости.
Нужна такая постановка задачи, что бы для ней можно было нарисовать алгоритм - квадратиками, ромбиками, стрелочками, вот тогда программист по такому ТЗ уже может написать правильный код.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как улучшить UDF?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]