Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как улучшить UDF? / 7 сообщений из 7, страница 1 из 1
15.09.2020, 13:51
    #39998762
Renziglov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как улучшить UDF?
Привет
Речь идет о задании разработать 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
15.09.2020, 14:03
    #39998772
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как улучшить UDF?
Код: 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
15.09.2020, 14:05
    #39998775
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как улучшить UDF?
Renziglov
одинаковы ли данные 2-х таблиц

Вы сравниваете данные или количество записей в таблицах?
В общем случае это не одно и то же.
...
Рейтинг: 0 / 0
15.09.2020, 14:21
    #39998793
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как улучшить UDF?
Код: 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
15.09.2020, 14:25
    #39998799
Renziglov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как улучшить UDF?
Данные.
Мое понимание такое, что если при наличие одинаковых таблиц в одну из них добавляется строка с произвольными данными, они становятся разными. Но если просто дублируется последняя строка не внося разнообразия в данные - таблицы должны оставаться одинаковыми
...
Рейтинг: 0 / 0
15.09.2020, 14:31
    #39998804
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как улучшить UDF?
Renziglov
Данные.
Мое понимание такое, что если при наличие одинаковых таблиц в одну из них добавляется строка с произвольными данными, они становятся разными. Но если просто дублируется последняя строка не внося разнообразия в данные - таблицы должны оставаться одинаковыми


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

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


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