none
Error UPDATE en cláusula FROM RRS feed

  • Pregunta

  • Hola:

    Me tiene desesperada este tema, mirad, tengo 2 tablas. Tabla 1(Balances) Campos Cód_GC nvarchar y Ejer:01 decimal(15,2) y otra tabla "ImportacionDatos" concampos Cíd_GC nvarchar y SaldoUnificado; decial (15,2).

    Bueno pues quiero copiar "Update" los saldos de la tabla2 "ImportacionDatos" a la tabla 1"Balances", el campo a copiar datos es en Balances: Ejer_01 y en ImportacionDatos es SaldoUnificado.

    Pues bien, por mas combinaciones que hago todo el rato me da error en "FROM". No lo entiendo.

    El método que tengo es el siguiente:

    Private Sub btnImportA3_Click(sender As Object, e As EventArgs) Handles btnImportA3.Click
            Try
                Dim dt As DataTable = Nothing
                Dim ejercicio As String
    
                ' Obtenemos el objeto DataTable.
                dt = Me.DatosExcel
    
                ' Obtenemos el ejercicio
                ejercicio = VarEjercicio
    
                'Realizamos el update de los códigos de cuenta y los saldos unificados a formIntroducción de Datos.
                Dim frmIntrodDatos As New frmCuadroContable
    
                ' Declaramos una variable Connection
                Using cnn As DbConnection = da.CreateConnection()
    
                    ' Creamos el Commando
                    Dim cmd As DbCommand = cnn.CreateCommand()
    
                    Select Case ejercicio
                        Case "Ejer_01"
                            cmd.CommandText = "Update Balances SET  Ejer_01 = ImportacionDatos.SaldoUnificado FROM Balances " &
                            "INNER JOIN ImportacionDatos on Balances.Cód_GC = ImportacionDatos.Cód_GC "
    
                    End Select
    
                    ' Asignamos la conexión al comando
                    cmd.Connection = cnn
                    cnn.Open()
                    cmd.ExecuteNonQuery()
                End Using
    
                MsgBox("Datos procesados correctamente")
                Me.Close()
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    A ver si podéis indicarme donde tengo el error, porque no encuentro la manera de solucionarlo.

    Un saludo a todos.

    Gemma

    jueves, 25 de mayo de 2017 9:33

Respuestas

  • Gemma, el día de ayer platicamos al respecto en el post que escribiste Error en colsulta update. El problema que presentas -que es el mismo que el de ayer y también lo replica Alejandro- tiene que ver con la sintaxis permitida por UPDATE de SQL Server CE, el mismo no permite el uso de la cláusula FROM, por lo mismo la solución que se propone -en el POST del día de ayer- es que recuperes el conjunto de filas a afectar y por cada una de ellas ejecutes una operación de UPDATE bajo la forma simple que entiende SQL SERVER CE:

    UPDATE NombreTabla SET NombreColumna = Valor WHERE ID = ID


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta gemma_campillo jueves, 25 de mayo de 2017 16:27
    jueves, 25 de mayo de 2017 14:35

Todas las respuestas

  • Hola Gemma,

    puedes poner el texto del mensaje del error y el contenido del commandText?

    Por cierto, los campos Cód_GC van acentuados?

    Un saludo.


    JMF

    jueves, 25 de mayo de 2017 10:07
  • Hola JMF70:

    Gracias por responder.

    El error es: Error al realizar la consulta. [Token líne number = 1, Token line offset = 63, Token in error = FROM".

    El contenido del command.text ya está puesto en la pregunta, pero de todas formas es este:

    cmd.CommandText = "Update Balances SET  Ejer_01 = ImportacionDatos.SaldoUnificado FROM Balances " &
                            "INNER JOIN ImportacionDatos on Balances.Cód_GC = ImportacionDatos.Cód_GC "
    

    Y Por último aunque Cód_GC vaya acentuado, no es necesario ponerlo entre corchetes. Funciona igual, creo que por ahí no va el error.

    Un cordial saludo.

    Gemma

    jueves, 25 de mayo de 2017 10:50
  • Hola,

    has probado a ejecutar el UPDATE directamente desde Management Studio?

    Un saludo.


    JMF

    jueves, 25 de mayo de 2017 11:30
  • Hola:

    Si, lo había probado antes y da el mismo error.

    No entiendo que puede ser, los nombres de las tablas son correctos, los campos también. No sé.

    Bueno a seguir probando.

    Un saludo.

    Gemma

    jueves, 25 de mayo de 2017 12:09
  • No tiene sentido....lo he probado y no he tenido ningún problema.

    Que versión de SQL Server estas usando?

    Puedes mandar una captura de pantalla de la ejecución desde le Management Studio?

    Un saludo


    JMF

    jueves, 25 de mayo de 2017 12:26
  • Gemma,

    si sigues trabajando con SQLCompact entonces no puedes usar esa version de la sentencia UPDATE. Como comente ayer, la forma permitida por SQLCompact es:

    UPDATE tabla
    SET columna = expression
    WHERE ...

    Como vez no es permitido usar la clausula FROM.

    https://technet.microsoft.com/en-us/library/ms174122(v=sql.110).aspx


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    jueves, 25 de mayo de 2017 12:39
  • Hola Hunchback:

    No acabo de comprender bien lo del FROM.

    Ahora la tengo así y continúa dando el mismo error en el FROM, pero no se como arreglar esto.

    cmd.CommandText = "Update bal SET bal.Ejer_01 = imp.SaldoUnificado " &
                                              "FROM Balances bal " &
                                              "INNER JOIN ImportacionDatos imp " &
                                              "ON bal.Cód_GC = imp.Cód_GC " &
                                              "WHERE bal.IdEmpresa = @empresa"

    Gracias por la ayuda como siempre.

    Gemma

    jueves, 25 de mayo de 2017 12:49
  • Gemma,

    Lo que tratas de hacer no es permitido en SQLCompact (es una limitacion).

    Tendras que buscar otro metodo, quizas hacer la actualizacion en la aplicacion.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    jueves, 25 de mayo de 2017 14:30
  • Gemma, el día de ayer platicamos al respecto en el post que escribiste Error en colsulta update. El problema que presentas -que es el mismo que el de ayer y también lo replica Alejandro- tiene que ver con la sintaxis permitida por UPDATE de SQL Server CE, el mismo no permite el uso de la cláusula FROM, por lo mismo la solución que se propone -en el POST del día de ayer- es que recuperes el conjunto de filas a afectar y por cada una de ellas ejecutes una operación de UPDATE bajo la forma simple que entiende SQL SERVER CE:

    UPDATE NombreTabla SET NombreColumna = Valor WHERE ID = ID


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta gemma_campillo jueves, 25 de mayo de 2017 16:27
    jueves, 25 de mayo de 2017 14:35
  • Vaya, es un SQL Compact!!! haber empezado por ahi.

    Echale un vistazo a este enlace:

    https://stackoverflow.com/questions/6933686/update-on-two-inner-joined-tables-in-sql-server-compact-4

    Un saludo


    JMF

    jueves, 25 de mayo de 2017 14:37
  • Hola Gema:

    Creo que lo que te trata de decir "Hunchback" es que la clausula FROM no se emplea directamente en un UPDATE.

    La instruccion estandar es:

    UPDATE Orders SET [Ship Address] = '21 rue de l''xylophie' WHERE [Customer ID] = 'VINET'

    Y tu instruccion es:

    UPDATE bal SET bal.Ejer_01 = imp.SaldoUnificado FROM Balances bal INNER JOIN ImportacionDatos imp ON bal.Cód_GC = imp.Cód_GC WHERE bal.IdEmpresa = @empresa


    luego me inclino a pensar que la forma correcta sería:

    UPDATE Balances
    SET
       Ejer_01 = imp.SaldoUnificado
    FROM
       Balances bal 
       INNER JOIN ImportacionDatos imp 
          ON bal.Cód_GC = imp.Cód_GC
    WHERE 
       bal.IdEmpresa = @empresa

    Ah! y dale una mirada a este link:

    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/e3f7f07c-cb0f-4d74-a612-4b7fa152826f/sql-server-ce-35-update-with-subquery?forum=sqlce 

    Puede que te sirva de inspiración!.

    Saludos cordiales,


    Camilo Villa



    jueves, 25 de mayo de 2017 14:42
  • Hola Camilo:

    Continúa dando el mismo error en FROM.

    Muchas gracias.

    Gemma

    jueves, 25 de mayo de 2017 16:24
  • Hola Williams:

    Siento recoinocer que no lo acabo de entender, a ver si me dejan en paz y lo mito a fondo. EEs la última setencia que me falta y la quiero acabar como sea, después de los dolores de cabeza que nos ha dado.

    Se me hace difícil entender por qué no admite ese tipo de sentencias la sqlcompact.

    Bueno, e intentado com una forma más básica pero también me da error, voy probando.

      cmd.CommandText = "UPDATE Balances SET Balances.Ejer_01  = ImportacionDatos.SaldoUnificado WHERE Balances.Cód_GC = ImportacionDatos.Cód_GC and Balances.IdEmpresa = @empresa "
    

    Williams después de lo que te he mareado voy a cerrar la respuesta agradeciéntose tu inestimable ayuda como siempre, pero ya te digo que me cuesta mucho entenderlo y necesito tiempo para ello.

    Un fuerte abrazo querido amigo.

    Gemma

    jueves, 25 de mayo de 2017 16:27