Sql UNION ALL仅返回第一列

Sql UNION ALL仅返回第一列,sql,vb.net,ms-access,Sql,Vb.net,Ms Access,我正在尝试将一些数据从旧的Access数据库迁移到新的Access数据库,一些列发生了更改,例如,以前划分为街道、号码、城市和邮政编码的旧“地址”现在只有一列。 因此,在更新新数据库之前,我需要将所有列合并为一个列。 我没有收到任何错误和警告,尽管它只显示更新数据库的第一列 我想做的是: //Open the connection with the database oldBuys.Open() newBuys

我正在尝试将一些数据从旧的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()

我猜想您需要的就是这个(
|
是SQL字符串连接运算符):


您需要这样的SQL选择:

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

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

SELECT [Street] & ' ' & [Number] & ' ' & [City] & ' ' & [State] & ' ' & [postalCode] 
FROM Data WHERE Cod = ...
SELECT Street & ' ' & Number & ' ' & PostalCode & ' ' & City & ' ' & State 
FROM Data
WHERE Cod=@cod1 
此选择在假设所有列都是字母数字的情况下工作,如果其中一些列是数字的,则必须在连接之前转换列

UNION语句用于合并不同查询的结果,将结果“表”合并到一个结果集中

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


EDIT:我已更正了用+for&替换的语句,以将其调整为访问语法。

UNION用于组合来自不同查询的行,您可能希望组合列,在这种情况下,您的查询应该将它们连接起来。谢谢!你的答案是最完整的,所以我选择你的答案是正确的。结果是:Dim Findallar打扮成新的OleDb.OleDbCommand(“从数据中选择街道、号码、城市、州、邮政编码,其中Cod=@Cod”,Oldby)