Как автоматически установить SNo строки в MS SQL Server 2005? - PullRequest
1 голос
/ 24 апреля 2011

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

В качестве примера:

У меня есть образец таблицы клиентов сследующие строки:

SNo CustomerName Age

1   Dani         28
2   Alex         29
3   Duran        21
4   Mark         24

И предположим, что я удаляю третью строку, таблица выглядит так:

SNo CustomerName Age

1   Dani         28
2   Alex         29
4   Mark         24

Но я хочу, чтобы таблица выглядела так:

SNo CustomerName Age

1   Dani         28
2   Alex         29
3   Mark         24

Как мне этого добиться?

Пожалуйста, помогите мне

Спасибо в ожидании

Ответы [ 5 ]

3 голосов
/ 24 апреля 2011

Как уже указывалось, выполнение этого может нарушить что-либо в отношениях с SNo, однако, если вы делаете это, потому что вам нужны порядковые номера на вашем уровне представления, например, вы можете извлечь номер строки [1..n] с помощью ;

SELECT ROW_NUMBER() OVER(ORDER BY SNo ASC), SNo, CustomerName, Age FROM Customer

Очевидно, что в этом случае номер строки является просто возрастающим числом, и это бессмысленно по отношению к чему-либо еще.

2 голосов
/ 25 апреля 2011

Почему бы не создать представление?

CREATE VIEW <ViewName>
AS
SELECT     
ROW_NUMBER() OVER(ORDER BY SNo ASC) AS SNo
,CustomerName
,Age
FROM Customers

GO

Затем получите доступ к данным в таблице клиентов, выбрав в представлении.

Конечно, SNo, показанное представлением, не имеет смысла в контексте отношений, но возвращаемые данные будут выглядеть точно так, как вы хотите.

2 голосов
/ 24 апреля 2011

Не думаю, что ты хочешь это сделать. Представьте себе сценарий, где у вас есть другая таблица CustomerOrder, в которой хранятся все заказы клиентов. Структура этой таблицы может выглядеть примерно так:

CustomerOrder
-------------
OrderID     INT
SNo         INT
OrderDate   DATETIME
...

В этом случае поле SNo является внешним ключом в таблице CustomerOrder, и мы используем его для связи заказов с клиентом. Если вы удалите запись из таблицы Customer (скажем, с помощью SNo = 1), собираетесь ли вы вернуться и обновить значения SNo во всей таблице CustomerOrder? Лучше всего позволить автоинкременту идентификатора и не беспокоиться о пробелах в идентификаторах из-за удалений.

1 голос
/ 24 апреля 2011

Как указывалось в других ответах, это плохая идея, и если причина для презентации, есть другие решения.

-- Add data to temp table
select SNo, CustomerName, Age
into #Customer
from Customer

-- Truncate Customer
-- Resets identity to seed value for column
truncate table Customer

-- Add rows back to Customer
insert into Customer(CustomerName, Age)
select CustomerName, Age
from #Customer
order by SNo

drop table #Customer
1 голос
/ 24 апреля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...