Member 14143173 Ответов: 3

Я хочу вставить данные в таблицу в SQL с порядком по имени


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

Что я уже пробовал:

insert   eta_user.dbo.RTU_AVAIL_DIALY  (RTU_NAME )
select substation_name   from [ereps].[dbo].[FRTU_AVAILABILITY_CONFIG]  order by
substation_name

F-ES Sitecore

Существует ли кластеризованный индекс (или первичный ключ) на RTU_AVAIL_DIALY? Если да, то какой тип поля имеет кластеризованный индекс\первичный ключ?

3 Ответов

Рейтинг:
14

phil.o

Желание поддерживать порядок сортировки в таблице базы данных-это проблема в первую очередь: сортировка-это операция, которая действительно полезна только тогда, когда представление данных для конечного пользователя. Компонент database engine знает, как эффективно хранить свои данные, и его критерии для этого могут отличаться от критериев пользователей-людей.

Вы должны перестать беспокоиться о порядке хранения записей :)
Любезно.


Рейтинг:
1

OriginalGriff

Если я создам ваши таблицы и попробую ваш код:

USE [Testing]
GO

/****** Object:  Table [dbo].[FRTU_AVAILABILITY_CONFIG]    Script Date: 13/05/2019 11:32:20 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[FRTU_AVAILABILITY_CONFIG](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[SubstationName] [nvarchar](max) NOT NULL,
	[Other] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

USE [Testing]
GO

/****** Object:  Table [dbo].[RTU_AVAIL_DIALY]    Script Date: 13/05/2019 11:32:42 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[RTU_AVAIL_DIALY](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[RTUName] [nvarchar](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SELECT TOP 1000 [ID]
      ,[SubstationName]
      ,[Other]
  FROM [Testing].[dbo].[FRTU_AVAILABILITY_CONFIG]

ID	SubstationName	Other
1	DDD	6
2	EEE	5
3	AAA	9
4	BBB	8
5	CCC	7

SELECT TOP 1000 [ID]
      ,[RTUName]
  FROM [Testing].[dbo].[RTU_AVAIL_DIALY]

ID	RTUName
1	AAA
2	BBB
3	CCC
4	DDD
5	EEE
По - моему, все в порядке.
Посмотрите на ваши входные и выходные данные ...


MadMyche

Я думаю, что ОП хочет, чтобы вся таблица была отсортирована после вставки

OriginalGriff

Что, как мы знаем, одновременно глупо и не совсем тривиально...

Member 14143173

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

OriginalGriff

Поэтому покажите нам примеры данных для ваших двух таблиц до и после команды, а также то, что вы ожидали получить после команды.

OriginalGriff

Вы понимаете, что SQL не сортирует данные автоматически? Если вы не укажете порядок сортировки, добавив ORDER BY к вашему оператору SELECT, SQL может возвращать строки в любом порядке, который он считает нужным (и этот порядок не обязательно должен быть одинаковым для двух последовательных операторов SELECT).

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

Рейтинг:
0

Suchitra Kumari

выберите &ЛТ;столбца col1 и GT;,&ЛТ;столбец col2 и GT;,&ЛТ;кол3&ГТ; dense_rank() над(приказ &ЛТ;столбец col2> В) как D
в <tmp_table>
из <old_table>

вставить в <new_table>
выберите &ЛТ;столбца col1 и GT;,&ЛТ;столбец col2 и GT;,&ЛТ;кол3&ГТ; от &ЛТ;tmp_table&ГТ;

использование dense_rank для упорядочения столбца.


CHill60

Зачем утруждать себя использованием dense_rank, если вы не используете partition by? Вы также можете просто использовать

select col1,col2,col3
into tmp_table
from old_table
ORDER BY col2
Даже если вы это сделаете, нет никакой гарантии, что select from tmp_table вернет строки в том порядке, в котором вы их вставили. С таким же успехом вы можете просто сделать это
insert into new_table 
select col1, col2, col3 from old_table 
order by col2
Даже после этого вы все равно не можете этого гарантировать select * from new_table вернет строки в нужном вам порядке!

Правильный ответ см. в решении 2