Как добавить вычисляемый столбец Row_Number в существующую таблицу - PullRequest
0 голосов
/ 05 марта 2019

Я использую SSMS 17.4.Мне нужно добавить новый столбец, который использует функцию Row_Number ().Но этот синтаксис кажется неверным

Я пробовал три разных способа, но ни один из них не сработал.

ALTER TABLE MYDB.[dbo].[Table1]
ADD Rn INT NOT NULL AS (ROW_NUMBER() OVER (PARTITION BY [MyColumn] ORDER BY [MyColumn]));

ALTER TABLE MYDB.[dbo].[Table1]
ADD ROW_NUMBER() OVER (PARTITION BY [MyColumn] ORDER BY [MyColumn]) INT NOT NULL AS Rn;


ALTER TABLE MYDB.[dbo].[Table1]
ADD Rn INT NOT NULL ROW_NUMBER() OVER (PARTITION BY [MyColumn] ORDER BY [MyColumn]);

Я также попробовал следующую рекомендацию по этой ссылке

https://ss64.com/sql/table_a_computed.html

   ALTER TABLE MYDB.[dbo].[Table1]
ADD Rn INT NOT NULL ADD Rn AS ROW_NUMBER() OVER (PARTITION BY [MyColumn] ORDER BY [MyColumn]);

1 Ответ

3 голосов
/ 05 марта 2019

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

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

...