Member 13867163 Ответов: 1

Разница между таблицей подсчета и обычной таблицей в SQL server


Привет,

Я хочу знать дополнительные функции таблицы подсчета в Sql server.
Я хочу разделить строку на несколько строк, для которых нижеприведенные два метода работали для меня одинаково.

Первый Способ
============
Объявить @параметр VARCHAR(8000)
SET @Parameter = ',Element01,Element02,Element03,Element04,Element05,'
Если OBJECT_ID('tempdb..#mytable') не равен NULL
DROP TABLE #mytable
Выберите TOP (select LEN(@Parameter)) identity(int,1,1)Как N в #mytable из Master.dbo.SysColumns sc1,
Мастер.ДБО.SysColumns ок2

-- Набор параметров@=', '+@параметр +','

--===== Сделайте то же самое, что и петля... "Шаг" через переменную
-- и верните позицию персонажа и самого персонажа... но только
-- если это запятая в таком положении...
Выбрать Т1.Н подстрока (параметр@, Т1.Н+1,функция charindex (',', параметр@, Т1.Н+1)-Т1.Н-1)вал
Из #mytable T1 внутреннее соединение #mytable t2 на t1.n=t2.n-1
Где t1.N <= LEN(@Parameter)
И подстрока(@Parameter,t1.N,1) = ','
ЗАКАЗ ПО N

Счетный Стол
Объявить @параметр VARCHAR(8000)
SET @Parameter = ',Element01,Element02,Element03,Element04,Element05,'
ЕСЛИ OBJECT_ID('DBO.TALLY') НЕ ЯВЛЯЕТСЯ НУЛЕВЫМ
ОТБРОСЬТЕ ТАБЛИЦУ DBO.ПОДСЧЕТ
Выберите TOP (select LEN(@Parameter)) identity(int,1,1)Как N в dbo.подсчет от Master.dbo.SysColumns sc1,
Мастер.ДБО.SysColumns ок2
-- Набор параметров@=', '+@параметр +','

--===== Сделайте то же самое, что и петля... "Шаг" через переменную
-- и верните позицию персонажа и самого персонажа... но только
-- если это запятая в таком положении...
Выбрать Т1.Н подстрока (параметр@, Т1.Н+1,функция charindex (',', параметр@, Т1.Н+1)-Т1.Н-1)
От ДБО.Tally T1 inner join dbo.подсчет t2 на t1.n=t2.n-1
Где t1.N <= LEN(@Parameter)
И подстрока(@Parameter,t1.N,1) = ','
ЗАКАЗ ПО N

Пожалуйста, посоветуйте

Спасибо

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

И таблица подсчета, и временная таблица работают для меня одинаково

RedDk

Интересный вопрос но что вы имеете в виду когда говорите:

-- Набор параметров@=', '+@параметр +','

Это действительно работает?

Я получаю Msg 537 "недопустимый параметр длины, передаваемый функции LEFT или SUBSTRING"

[РЕДАКТИРОВАТЬ]
Ладно, проверь это. Я все понял ... просто комментарий
[КОНЕЦ РЕДАКТИРОВАНИЯ]

..- работаю над этим.

Member 13867163

я поместил его в комментарий игнорируйте это
жду вашего ответа

RedDk

Слово "подсчет", вероятно, является профессорской вставкой. Проверьте свои заметки по курсу. (Он даже не появляется в SSMSE BOL и возвращает только легкое разбрызгивание возвратов в других онлайн-запросах кода).

Знаете ли вы, что вы можете создать схему [zizznoofuss] и полностью отказаться от использования [dbo]?

RedDk

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

Так что это вопрос времени. Но не надейтесь узнать, когда сеанс закончится. Вот почему выполнение временной работы под контролем схемы [dbo] кажется лучшим, что можно сделать в любое время, имхо.

1 Ответов

Рейтинг:
2

MadMyche

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

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

Преимущество использования "постоянной" таблицы-это производительность:
- Его не нужно создавать каждый раз, когда он вызывается.
- Индексирование. Хотя и то, и другое можно индексировать, постоянная таблица должна быть сделана только один раз.


Member 13867163

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

MadMyche

Любые две таблицы с одинаковой схемой будут работать одинаково. Они собираются предпринять те же усилия, чтобы установить и посеять. Преимущество таблицы "dbo.tally" заключается в том, что это не нужно делать во время выполнения. Еще одно преимущество заключается в том, что несколько операций могут использовать его одновременно.
А еще выше-ДБО.таблица подсчета может использоваться более чем для одной цели; я работал с их настройкой с различными столбцами "использование" для посева PKs и аналогичных приложений "общий набор ключей".
Хорошим местом для чтения таблиц подсчета в целом является Sql Server Central

Member 13867163

Спасибо Вам большое это понятно

MadMyche

Пожалуйста.
Пожалуйста, подумайте о принятии/оценке ответа.