Разница между таблицей подсчета и обычной таблицей в 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] кажется лучшим, что можно сделать в любое время, имхо.