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!