используя MS SQL мне нужно выбрать в таблицу при приведении целой загрузки строк в целые!это можно сделать? - PullRequest
1 голос
/ 11 октября 2011

По сути, я новый тип ИТ, старый парень оставил мне беспорядок!У нас есть БД MS-Access, в которой хранятся ответы на онлайн-анкету, в этой конкретной БД содержится около 45 000 записей, а в каждой анкете - 220 вопросов.Старик, по своей мудрости, решил хранить ответы на вопросы анкеты в виде текста, даже если ответы 0-5 целых чисел!

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

Итак, мне удалось довольно успешно перенести всю биоинфо в новую таблицу с:

SELECT id,[all bio column names] INTO resultsBioData FROM results;

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

SELECT id,CInt(q1) AS nq1.......CInt(q220) AS nq220 INTO resultsItemData FROM results;

Это, кажется, работает хорошо для приблизительно 400 записей, но затем просто останавливается, я думал, что это может быть, потому что этонажмите что-то, что не может преобразовать в целое число, чтобы начать, поэтому я написал небольшую Java-программу, которая удаляла любую запись, где любой из 220 ответов не был 0,1,2,3,4 или 5, и он по-прежнему дает около 400 (никогдахотя та же запись!)

У кого-нибудь есть идеи?Сейчас я делаю это на моей тестовой системе и действительно хотел бы чего-то надежного, прежде чем я сделаю это с нашей действующей системой!

Извините за длинный вопрос, но это заставляет меня задуматься!

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

Я не уверен, говорите ли вы о преобразовании данных в Access или SQL Server.В любом случае, поскольку вы изменяете схему схемы, сейчас самое время подумать, действительно ли вы хотите, чтобы таблица resultsItemData включала более 200 полей, от nq1 до nq220 (или, в конечном счете, nq240).И любые будущие добавления вопроса потребуют изменения структуры таблицы снова.

Практическое правило гласит: «столбцы дороги, строки дешевы».Это применимо независимо от того, находится ли таблица в Access или SQL Server.

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

id q_number answer
 1      nq1      3
 1      nq2      1

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

Редактировать : Поскольку вы застряли с подходом, который вы описали, мне интересно, еслион может работать с запросом «добавить» вместо запроса «создать таблицу».Создайте структуру таблицы resultsItemData и добавьте к ней запрос, который преобразует значения qx в числовые.

INSERT INTO resultsItemData (id, nq1, nq2, ... nq220)
SELECT id, CInt(q1), CInt(q2), ... CInt(q220) FROM results;
0 голосов
/ 18 октября 2011

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

0 голосов
/ 11 октября 2011

Попробуйте это решение:

select * into #tmp from bad_table
truncate table bad_table
alter bad_table alter column silly_column int
insert bad_table
select cast(silly_column as int), other_columns
from #tmp
drop table #tmp

Ссылка: Измените тип столбца с числами с varchar на int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...