我在MS Access中有一个查询,它从两个子查询创建一个表。对于正在创建的两个列,我将一个列从第一个子查询划分为第二个子查询中的一列。
第一列的数据类型是double;第二列的数据类型是十进制的,比例为2,但我希望第二列也是双精度。
有没有办法在通过标准生成表Access查询创建表时强制使用数据类型?
答案 0 :(得分:8)
一种方法是在将任何内容放入其中之前显式创建表。
您当前的陈述可能是这样的:
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
WHERE FirstName = 'Alistair'
但你也可以这样做:
----Create NewTable
CREATE TABLE NewTable(FirstName VARCHAR(100), LastName VARCHAR(100), Total DOUBLE)
----INSERT INTO NewTableusing SELECT
INSERT INTO NewTable(FirstName, LastName, Total)
SELECT FirstName, LastName,
FROM Person p
INNER JOIN Orders o
ON p.P_Id = o.P_Id
WHERE p.FirstName = 'Alistair'
这样您就可以完全控制列类型。如果需要重新创建表,可以随后删除表。
答案 1 :(得分:3)
您可以使用强制转换为FLOAT
函数CDBL()
,但有点奇怪的是,Access数据库引擎无法处理NULL
值,因此您必须自行处理,例如
SELECT first_column,
IIF(second_column IS NULL, NULL, CDBL(second_column))
AS second_column_as_float
INTO Table666
FROM MyTest;
...但您需要ALTER TABLE
添加密钥,约束等。最好先简单CREATE TABLE
然后使用INSERT INTO..SELECT
填充它。
答案 2 :(得分:0)
您可以在列周围使用CDbl。
答案 3 :(得分:0)
一种简单的方法是使用正确的字段类型创建一个空表,然后创建一个Append-To查询,Access将自动将数据转换为目标字段。
答案 4 :(得分:0)
我有类似的情况,但我有一个make-table查询创建一个NUMERIC数据类型的字段,我希望它是短文本。
我做了什么(我从Stack得到了这个想法)是创建一个表格,其中包含有问题的字段作为短文本,同时构建一个删除查询来擦除记录。我认为访问中的DELETE查询不会删除表,只删除表中的记录,这很有趣 - 我猜你必须使用DROP TABLE函数来清除表...
然后,我将生成表查询转换为APPEND查询,这是我以前从未做过的...我刚刚将DELETE查询的运行添加到我的进程中。
谢谢Stack Overflow!
史蒂夫
答案 5 :(得分:0)
我在要确保以文本形式存储的字段中添加一个'&“”',并在要以数字形式存储的字段中添加一个'* 1'(将数量乘以1)。 / p>
似乎可以解决问题。