Как добавить данные в один столбец - PullRequest
0 голосов
/ 16 января 2019

У меня есть вопрос относительно добавления данных в определенный столбец таблицы, вчера у меня было сообщение , в котором пользователь указал мне (спасибо за это) на то, что мне было нужно, и сказал, что обновление былоспособ получить то, что мне нужно, но я все еще не могу достичь своей цели.

У меня есть две таблицы: таблицы, из которых будет добавляться информация, и таблица, в которую будет добавляться информация,Вот пример:

source_table  (has only a column called "name_expedient_reviser" that is nvarchar(50))
name_expedient_reviser
kim
randy
phil
cathy
josh
etc.

с другой стороны, у меня есть таблица назначения, у этого есть два столбца, один с идентификаторами, а другой, где имена будут вставлены, значения этого столбца равны нулю,есть некоторые идентификаторы, которые будут использоваться для этого.

вот так выглядит другая таблица

dbo_expedient_reviser (имеет 2 столбца, уникальный_reviser_code числовой PK NOT AI и name_expedient_reviser, которые являютсяпользователи, которые проверяют целесообразность, это значение установлено как nvarchar (50)) и эта таблица теперь такая:

dbo_expedient_reviser
unique_reviser_code | name_expedient_reviser 
1                   | NULL
2                   | NULL
3                   | NULL
4                   | NULL
5                   | NULL
6                   | NULL

мне нужна информация оsource_table для вставки в строку name_expedient_reviser, поэтому результат должен выглядеть следующим образом

dbo_expedient_reviser
unique_reviser_code | name_expedient_reviser 
1                   | kim
2                   | randy
3                   | phil
4                   | cathy
5                   | josh
6                   | etc.

как я могу передать информацию в эту таблицу?Что мне нужно сделать?

РЕДАКТИРОВАТЬ

запрос, который, как я видел, должен был работать, не обновляет следующий:

UPDATE dbo_expedient_reviser
SET dbo_expedient_reviser.name_expedient_reviser = source_table.name_expedient_reviser
FROM source_table
JOIN dbo_expedient_reviser ON source_table.name_expedient_reviser = dbo_expedient_reviser.name_expedient_reviser
WHERE dbo_expedient_reviser.name_expedient_reviser IS NULL 

запрос должен был обновить информацию в таблице, извлекая ее из source_table, пока строка name_expedient_reviser равна нулю, но не работает.

1 Ответ

0 голосов
/ 16 января 2019

Поскольку с именами не связан Id, я бы просто использовал ROW_NUMBER и присоединился к ROW_NUMBER = unique_reviser_code. Единственная проблема состоит в том, чтобы знать, какие строки являются нулевыми. Из того, что я вижу, все они кажутся нулевыми. По вашим данным, так ли это, или в таблице периодически встречаются имена, например, 5, 17, 29 ... и т. Д.? Если name_expedient_reviser пуст в dbo_expedient_reviser, вы также можете усечь таблицу и напрямую вставить значения. Надеюсь, этот уникальный_ревизер-код уже не связан с другими вещами.

WITH CTE (name_expedient_reviser, unique_reviser_code)
AS
    (
    SELECT   name_expedient_reviser
            ,ROW_NUMBER() OVER (ORDER BY name_expedient_reviser)
    FROM source_table
    )
UPDATE er
SET er.name_expedient_reviser = cte.name_expedient_reviser      
FROM dbo_expedient_reviser er
JOIN CTE on cte.unique_reviser_code = er.unique_reviser_code

или усечение:

Truncate Table dbo_expedient_reviser

INSERT INTO dbo_expedient_reviser (name_expedient_reviser, unique_reviser_code)
SELECT DISTINCT
    unique_reviser_code = ROW_NUMBER() OVER (ORDER BY name_expedient_reviser)
   ,name_expedient_reviser
FROM source_table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...