Эквивалент RowID Oracle в SQL Server - PullRequest
74 голосов
/ 26 мая 2009

Что эквивалентно RowID Oracle в SQL Server?

Ответы [ 13 ]

1 голос
/ 19 сентября 2011

ROWID - это скрытый столбец в таблицах Oracle, поэтому для SQL Server создайте свой собственный. Добавьте столбец с именем ROWID со значением по умолчанию NEWID().

Как это сделать: Добавить столбец со значением по умолчанию к существующей таблице в SQL Server

0 голосов
/ 23 марта 2017

Вы можете получить ROWID, используя методы, указанные ниже:

1.Создайте новую таблицу с полем автоинкремента

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

Пример: Row_Number () Over (Разделение по порядку Deptno по sal desc)

Приведенный выше пример даст вам порядковый номер, основанный на максимальной зарплате каждого отдела. Разделение по желанию является необязательным, и вы можете удалить его в соответствии с вашими требованиями

0 голосов
/ 23 сентября 2011

Я взял этот пример из примера MS SQL, и вы можете видеть, что @ID может быть заменен на integer, varchar или что угодно. Это было то же решение, которое я искал, поэтому я делюсь им. Наслаждайтесь !!

-- UPDATE statement with CTE references that are correctly matched.
DECLARE @x TABLE (ID int, Stad int, Value int, ison bit);
INSERT @x VALUES (1, 0, 10, 0), (2, 1, 20, 0), (6, 0, 40, 0), (4, 1, 50, 0), (5, 3, 60, 0), (9, 6, 20, 0), (7, 5, 10, 0), (8, 8, 220, 0);
DECLARE @Error int;
DECLARE @id int;

WITH cte AS (SELECT top 1 * FROM @x WHERE Stad=6)
UPDATE x -- cte is referenced by the alias.
SET ison=1, @id=x.ID
FROM cte AS x

SELECT *, @id as 'random' from @x
GO
...