UNION ALL仅返回第一列

时间:2015-11-04 15:16:47

标签: sql vb.net ms-access

我正在尝试将旧的Access数据库中的一些数据迁移到新的数据库,更改了一些列,例如旧的“地址”过去被划分为街道,数字,城市和邮政编码现在只有一列。 因此,在更新新数据库之前,我需要将所有列合并为一个。 我没有得到任何错误,也没有任何警告,但它只显示更新数据库中的第一列。

我正在尝试做什么:

   //Open the connection with the database
                    oldBuys.Open()
                    newBuys.Open()

                    Dim codTable As New DataTable
                    Dim codTemp As Integer
                    Dim addressTable As New DataTable
                    Dim tempValue As String

        //Command to find all the client codes on the new database
                Dim findAllCodes As New OleDb.OleDbDataAdapter("SELECT Cod FROM Data", newBuys)
                    findAllCodes .Fill(codTable)

    //Search for all the adress of that code
                    For i = 0 To codTable.Rows.Count - 1

                        codTemp = codTable.Rows(i).Item(0)

    //Union all the values
                        Dim findAllAdress As New OleDb.OleDbCommand("SELECT Street FROM Data" & _
    " WHERE Cod=@cod1 UNION ALL SELECT Number FROM Data WHERE Cod=@cod2 UNION ALL SELECT City" & _
    " FROM Data WHERE Cod=@cod3 UNION ALL SELECT State FROM Data WHERE Cod=@cod4 UNION" & _
    " ALL SELECT postalCode FROM Data WHERE Cod=@cod5", cnCompraAntigo)
                        findAllAdress.Parameters.AddWithValue("@cod1", codTemp)
                        findAllAdress.Parameters.AddWithValue("@cod2", codTemp)
                        findAllAdress.Parameters.AddWithValue("@cod3", codTemp)
                        findAllAdress.Parameters.AddWithValue("@cod4", codTemp)
                        findAllAdress.Parameters.AddWithValue("@cod5", codTemp)


    //Transfer the value to the variable
                        tempValue = findAllAdress.ExecuteScalar

   //Try to update the new database
                            Dim updateAllAdress As New OleDb.OleDbCommand _ 
    ("UPDATE Data SET fullAdress=@end WHERE Cod=@cod", newBuys)
                            updateAllAdress.Parameters.AddWithValue("@end", tempValue)
                            updateAllAdress.Parameters.AddWithValue("@cod", codTemp)
                            updateAllAdress.ExecuteNonQuery()

                        Next

                        newBuys.Close()
                        oldBuys.Close()

3 个答案:

答案 0 :(得分:1)

我怀疑你只需要这个(||是SQL字符串连接运算符):

//Union all the values
                    Dim findAllAdress As New OleDb.OleDbCommand("SELECT Street || Number || City || State || postalCode FROM Data" & _
" WHERE Cod=@cod1", cnCompraAntigo)
                    findAllAdress.Parameters.AddWithValue("@cod1", codTemp)

答案 1 :(得分:1)

您需要这样的SQL Select:

SELECT [Street] & ' ' & [Number] & ' ' & [City] & ' ' & [State] & ' ' & [postalCode] 
FROM Data WHERE Cod = ...

答案 2 :(得分:1)

您正在尝试执行的操作可以在SELECT语句中连接列,如下所示:

SELECT Street & ' ' & Number & ' ' & PostalCode & ' ' & City & ' ' & State 
FROM Data
WHERE Cod=@cod1 

此SELECT在假设所有列都是字母数字的情况下工作,如果它们中的一些是数字,则必须在连接之前转换列。

UNION语句用于合并不同查询的结果,将结果“表”组合在一个结果集上。

例如,您可以选择表的所有男性名称,而在另一个select语句中检索所有女性名称,使用UNION,您可以在一个结果中组合两个select语句。

编辑:我已经更正了代替+ for&将其调整为Access语法。