Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
Всем привет!

Условно говоря есть таблица с данными, которые необходимо передать 3ему, но данные нужно скрыть.
Например, есть таблица с организациями:
id int
OrganizationName varchar(150)
address varchar(MAX)

Пример содержащихся в них данных:
153 ООО Метелочкин Мск
268 ООО Савочкин СПб
386 ОАО Кефириков Волгоград

И Мне нужно заменить данные содержащиеся в OrganizationName на Ораганизация1, Организация2 и т.д.

Как это можно реализовать? НаGOOGLEить не получилось, т.к не знаю даже как правильно правильно спросить!
Можно в FAQ ткнуть, можно на примере.

Заранее Спасибо!
2 дек 15, 08:35    [18500776]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Mihail3,

А просто на слово "Организация" заменить? Или вот прямо нужно с цифрами на конце?
2 дек 15, 08:38    [18500788]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
MrVoid,
Данные должны быть отличимы.
2 дек 15, 08:54    [18500843]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Mihail3,

А если организация будет встречаться несколько раз, ей необходимо будет присвоить одинаковую цифру везде?
2 дек 15, 09:01    [18500870]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
MrVoid, она не будет встречаться дважды.
2 дек 15, 09:02    [18500875]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Mihail3,
MY_TABLE замените на имя своей таблицы.
select 'Организация' + cast(ROW_NUMBER() over (order by OrganizationName) as varchar(100)) from MY_TABLE;
2 дек 15, 09:13    [18500927]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Mihail3
И Мне нужно заменить данные содержащиеся в OrganizationName на Ораганизация1, Организация2 и т.д.
Это называется "обезличивание" (для гугления).
2 дек 15, 09:26    [18500994]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
MrVoid, но в случае с большим количеством данных изменение на основании сформированной таблицы соответствия по вашему запросу, не слишком ли тяжеловато будет серверу?
Хотя наверное если с OTB это делать, то норм! Спасибо! Про Row_number почитаю.
А вот в случае если данные мошли бы повторяться, как бы можно было тут выкрутиться?
2 дек 15, 09:35    [18501058]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Mihail3,

select 
  id
,('Организация'+cast(id as varchar(10))) as OrganizationName
,('Адрес' +cast(id as varchar(10))) as address
from [таблица с организациями]
2 дек 15, 09:35    [18501063]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mihail3
но в случае с большим количеством данных изменение на основании сформированной таблицы соответствия по вашему запросу, не слишком ли тяжеловато будет серверу?

Вы волнуетесь, сможет ли сервер сделать select, в котором кроме полей таблицы есть еще вычисляемые выражения ?
2 дек 15, 09:37    [18501077]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
Glory
Mihail3
но в случае с большим количеством данных изменение на основании сформированной таблицы соответствия по вашему запросу, не слишком ли тяжеловато будет серверу?

Вы волнуетесь, сможет ли сервер сделать select, в котором кроме полей таблицы есть еще вычисляемые выражения ?

ну мне же не совсем нужно просто select сделать, а мне нужно пробежаться по таблице и заменить(Update) в ней все значения(в соответствии с результатом получаемым запросом MrVoid).




LexusR
Mihail3,

select 
  id
,('Организация'+cast(id as varchar(10))) as OrganizationName
,('Адрес' +cast(id as varchar(10))) as address
from [таблица с организациями]


Нет. Я понимаю, что это самое простое, что можно придумать, но не хочется поступать так.
2 дек 15, 09:51    [18501127]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
Хотя в принципе, всем СПАСИБО!!!. Дальше я уже сам)
2 дек 15, 09:53    [18501131]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mihail3
а мне нужно пробежаться по таблице и заменить(Update) в ней все значения(в соответствии с результатом получаемым запросом MrVoid).

Я вам по секрету скажу - Update и так "бежит по таблице". Не нужно отдельно "бежать" и отдельно "заменять"
2 дек 15, 10:00    [18501147]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
Glory,


with t1(oldname , newname)
as
(
select OrganizationName , 'Организация' + cast(ROW_NUMBER() over (order by OrganizationName ) as varchar(100))
from Test].[dbo].[Point] where point_type = 'Organization'
)
Update [Test].[dbo].[Point] set OrganizationName =(select top 1 newname from t1 where OrganizationName =oldname)
where point_type = 'Organization'

Можно этот запрос сделать лучше или написать другим образом, что бы работало быстрее(просто интересно)?
2 дек 15, 10:10    [18501176]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mihail3
Можно этот запрос сделать лучше или написать другим образом, что бы работало быстрее(просто интересно)?

Хосподи

Update [Test].[dbo].[Point] set OrganizationName =  'Организация' + cast(id as varchar(10))
where point_type = 'Organization'
2 дек 15, 10:13    [18501195]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
Glory,

Неа, id юзать не интересно. Если бы можно было бы юзать его, то юзал бы) я понимаю. что нет никакой разницы, но вот так вот)
2 дек 15, 10:42    [18501376]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mihail3
Неа, id юзать не интересно.

Если вам нужны "интересные" запросы, то что вы тогда беспокоитесь о производительности ?
2 дек 15, 10:44    [18501385]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
Glory, ну так производительность всегда превыше всего. А почему нельзя приделывать id, так потому, что есть другие таблицы, где подобного id нет
2 дек 15, 10:57    [18501460]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Mihail3
Можно этот запрос сделать лучше или написать другим образом, что бы работало быстрее(просто интересно)?
with t1(OrganizationName , newname)
as
(
select OrganizationName , 'Организация' + cast(ROW_NUMBER() over (order by OrganizationName ) as varchar(100))
from Test].[dbo].[Point] where point_type = 'Organization'
)
Update t1 set OrganizationName = newname;
2 дек 15, 11:00    [18501489]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mihail3
Glory, ну так производительность всегда превыше всего. А почему нельзя приделывать id, так потому, что есть другие таблицы, где подобного id нет

по-моему вы бредите
цифирки в символьном поле какое отношение имеют к другим таблицам ?
2 дек 15, 11:06    [18501537]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4994
Mihail3,
А почему бы просто не грохнуть скрываемые данные?
Ну а если потом это будет возвращаться каким то макаром назад, то нужно завести справочники скрываемых данных и в передаваемых заменить реальные данные на первичный ключ справочника.
2 дек 15, 11:55    [18501948]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
Glory
Mihail3
Glory, ну так производительность всегда превыше всего. А почему нельзя приделывать id, так потому, что есть другие таблицы, где подобного id нет

по-моему вы бредите
цифирки в символьном поле какое отношение имеют к другим таблицам ?


Сорри, ввел в заблуждение. Я имел ввиду, что если структура таблицы будет без id (OrganizationName varchar(150)
address varchar(MAX)), то тут нельзя будет опираться на идентификатор
2 дек 15, 12:22    [18502141]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Mihail3
Member

Откуда:
Сообщений: 88
invm
Mihail3
Можно этот запрос сделать лучше или написать другим образом, что бы работало быстрее(просто интересно)?
with t1(OrganizationName , newname)
as
(
select OrganizationName , 'Организация' + cast(ROW_NUMBER() over (order by OrganizationName ) as varchar(100))
from Test].[dbo].[Point] where point_type = 'Organization'
)
Update t1 set OrganizationName = newname;

Что-то тут точно отработает не так. Надо ради интереса попробовать.

ЕвгенийВ
Mihail3,
А почему бы просто не грохнуть скрываемые данные?
Ну а если потом это будет возвращаться каким то макаром назад, то нужно завести справочники скрываемых данных и в передаваемых заменить реальные данные на первичный ключ справочника.

База нужна для тестов. Отдавать боевые данные нельзя и соответственно возвращать ничего не нужно будет.
2 дек 15, 12:26    [18502167]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Хосподи 2
Опираться надо на знания

select name, name as new_name into #temp from sysobjects
go
declare @x int
set @x = 0
update #temp set new_name = 'name'+cast(@x as varchar(10)), @x=@x+1
go
select * from #temp
go
drop table #temp
go


select name, name as new_name into #temp from sysobjects
go
update #temp set new_name = 'name'+cast(cast(%%physloc%% as bigint) as varchar(20))
go
select * from #temp
go
drop table #temp
go
2 дек 15, 12:30    [18502190]     Ответить | Цитировать Сообщить модератору
 Re: Подмена данных в таблице условными значениями(сокрытие данных)  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Mihail3
Что-то тут точно отработает не так.
Ну да, конечно.
Что именно будет "не так" и почему "не так" не знаю, но совершенно точно знаю, что "не так" таки случится...
2 дек 15, 12:40    [18502252]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить