visual usuario una studio sesion relacionado puede pudo mientras microsoft instancia inicio establecia especifico errores error conexión conexion conectar con comunes codigos abrir sql db2 upsert

usuario - microsoft sql server error 2



Cómo resolver el error SQL0418N (1)

Básicamente, DB2 no sabe qué tipos de datos está enviando en esos parámetros. Supongo que está en una versión anterior de DB2 (menos de 9.7 en Linux / Unix / Windows, o en una versión de Mainframe anterior a 10.1), que no genera una gran cantidad de conversiones "automáticas". O está enviando valores NULL (que todavía tienen que ser "mecanografiados", por extraño que parezca).

Puede solucionar el problema creando marcadores de parámetros como parámetros tipeados (supongo que aquí están los tipos de datos, use lo que sería apropiado):

MERGE INTO AB.TESTING_TABLE A USING (VALUES ( CAST(@TEST AS CHAR(4)) ,CAST(@ACTION AS CHAR(1)) )) B(TEST_ID, "ACTION") ON (A.TEST_ID = B.TEST_ID) WHEN NOT MATCHED THEN INSERT (TEST_ID, "ACTION") VALUES (B.TEST_ID, B.ACTION) WHEN MATCHED THEN UPDATE SET "ACTION" = B.ACTION

Además, dado que está utilizando MERGE , no tiene que usar parámetros en las partes UPDATE o INSERT , puede consultar los valores en la tabla USING que pasó. Además, dado que está haciendo una coincidencia en TEST_ID , no es necesario que lo incluya en su declaración UPDATE , ya que de todos modos no se actualizaría. :)

Estoy usando la siguiente declaración para actualizar / insertar algunos datos en una tabla y, si lo ejecuto sin parámetros, está bien. Sin embargo, tan pronto como trato de ejecutarlo usando parámetros arroja:

SQL0418N: una instrucción contiene el uso de un marcador de parámetro sin tipo, la palabra clave DEFAULT o un valor nulo que no es válido .

He leído la información del error aquí , pero todavía estoy luchando con por qué mi declaración no se ejecutará.

--This statement works MERGE Into AB.Testing_Table A USING (VALUES(''TEST'', ''P'')) B(TEST_ID, "ACTION") ON (A.TEST_ID = B.TEST_ID) WHEN NOT MATCHED THEN INSERT (TEST_ID, "ACTION") VALUES (''TEST'', ''P'') WHEN MATCHED THEN UPDATE SET TEST_ID = ''TEST'' ,"ACTION" = ''P''; --This statement fails with error SQL0418N MERGE Into AB.Testing_Table A USING (VALUES(@TEST, @ACTION)) B(TEST_ID, "ACTION") ON (A.TEST_ID = B.TEST_ID) WHEN NOT MATCHED THEN INSERT (TEST_ID, "ACTION") VALUES (@TEST, @ACTION) WHEN MATCHED THEN UPDATE SET TEST_ID = @Test ,"ACTION" = @Action;

Gracias de antemano por la ayuda!