使用MS SQL,我需要选择一个表,同时将整个字符串加载到int!能做到吗?

使用MS SQL,我需要选择一个表,同时将整个字符串加载到int!能做到吗?,sql,ms-access,casting,ms-access-2007,Sql,Ms Access,Casting,Ms Access 2007,基本上,我是新IT类型的家伙,老家伙给我留下了一堆乱七八糟的东西!我们有一个MS Access数据库,它存储在线问卷的答案,这个数据库有大约45000条记录,每个问卷有220个问题。老家伙,在他的智慧中,决定将问卷问题的答案存储为文本,即使答案是0-5个整数 无论如何,我们现在需要在问卷中添加大量新问题,最多240个问题。这个数据库中存储了255个字段的访问限制和30列的传记数据,这意味着我需要拆分数据库 因此,我成功地将所有bioinfo非常愉快地放入了一个新表中: SELECT id,[al

基本上,我是新IT类型的家伙,老家伙给我留下了一堆乱七八糟的东西!我们有一个MS Access数据库,它存储在线问卷的答案,这个数据库有大约45000条记录,每个问卷有220个问题。老家伙,在他的智慧中,决定将问卷问题的答案存储为文本,即使答案是0-5个整数

无论如何,我们现在需要在问卷中添加大量新问题,最多240个问题。这个数据库中存储了255个字段的访问限制和30列的传记数据,这意味着我需要拆分数据库

因此,我成功地将所有bioinfo非常愉快地放入了一个新表中:

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条(尽管不是同一条记录!)

有人有什么想法吗?我现在正在我的测试系统上做这件事,在我对我们的实时系统做这件事之前,我真的很想要一些健壮的东西

很抱歉问了这么长的问题,但这让我头疼

试试这个解决方案:

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

参考资料:

我不确定您所说的是在Access还是SQL Server中进行数据转换。无论哪种方式,因为你正在重新设计模式,现在是考虑是否真的希望ReultStestMeDATA表包含200个字段,从NQ1到NQ220(或最终NQ240)。将来任何问题的添加都需要再次更改表结构

经验法则是“列很昂贵,行很便宜”。无论该表是在Access中还是在SQL Server中,这都适用

考虑每个id/问题组合一行

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;

最后,我编写了一个小java程序,创建了新表,并逐一检查了每条记录,将字段转换为整数,完成整个过程大约需要一个半小时,因此我仍然在寻找更好的解决方案,以便在实时系统中实现这一点。

如果您使用Access,为什么你的问题说你需要使用MSSQL?@Lamak:因为我相信他正在将数据迁移到SQL Server。寻找快速而肮脏的答案?对转换进行批处理怎么样。写一个快速循环,一次做300条记录。很抱歉造成混淆,我认为access也使用mssql,我错了吗?我不打算迁移到SQL server,将来我希望迁移到mysql。240*45000=10800000行是否真的比240列更好?access能解决这个问题吗?没有说错,只是对我来说有点陌生。目前,围绕这个表构建了一个相当大的web应用程序,需要访问数百个文件。虽然改变表格的设计不会太费力,但更新所有使用它的文件将远远超出我自己的能力(是的,就是我!)。目前,该应用程序是一个巨大的混乱/混合的.asp和.php,在过去15年左右的时间里,由各种各样的人(每次只有一个)构建。所以它是……好吧……维护起来很糟糕,我希望在某个时候重写整个东西(也许将来会看到Google dart是什么样子!),然后迁移到mysql或其他东西。看,我把你的逻辑弄对了吗。您反对我建议的重新设计,因为您需要修改ASP和PHP文件。但这是否意味着您不需要修改这些文件来响应您首选的设计更改。。。其中包括将30列传记数据移动到一个新表中,并为其他问题添加列?这是令人惊讶的。是的,从长远来看,我并不反对,这确实是我打算做的事情,但权力更希望我花时间做事情,结果他们现在可以看到……我试图解释,但没有用。仅仅拆分表意味着我只需要调整查询以查看不同的表并更改几个循环的长度。只是尝试了一下,
truncate
在access中不起作用,但我认为所有方法都是删除内容,我可以使用
delete FROM bad_table
来代替,对吗?