Procedimiento almacenado extendido de MS SQL Server con parámetros, ¿cómo pasar parámetros?
Ejemplo:
-Nota: El procedimiento almacenado extendido se llama "ExtSt", y los parámetros pasados son dos "3" y la variable @STRSTR.
-Hay dos parámetros de salida. @¿afuera? ¿Qué usar? @HEXSTRGet .
¿EJEC? MaestroDBO. ¿Ester? 3',@STRSTR,@¿FueraOK? Salida, @HEXSTRGet? Salida 2. Para escribir procedimientos almacenados de MS SQL, necesita utilizar herramientas de programación, como VC en la serie Microsoft VS, Delphi y C Builder de Sapphire Company, etc. En diferentes entornos de programación, los métodos y códigos específicos varían mucho. El siguiente es un código práctico que escribí en VC hace algún tiempo. Los códigos clave los proporcionan amigos con conocimientos básicos de programación:
// - dbcc? ESQLDLL (Gratis) - SQL? Ejecutado en el servidor, ¿eliminar el procedimiento almacenado extendido? ¿ESSQLDLL? Oración
//exec? sp_addextendedproc? N'BeyExtSt',? N'D:\VCSQLEXT\ESQLDLL.dll '? -¿SQL? ¿Ejecutar en el servidor para generar un procedimiento almacenado extendido? ¿ESSQLDLL? Oración
RETCODE? __declspec(dllexport)? BeyExtSt(SRV_PROC?*pSrvProc){
INT? REBZ[1]; //salida SQLEXTL (indicador de estado)
Char? ReArgsStr[256]; //cadena de salida SQLEXT
ULONG? ReArgsLen//Longitud de salida SQLEXT
INT? nArgs// ¿Número de parámetros pasados? Acepta hasta 8 parámetros.
¿Ciel? InArgsChar1[256], InArgsChar2[256], InArgsChar3[256], inargschar 4[256] //Se utiliza para pasar el contenido del parámetro.
¿Ciel? InArgsChar5[256], InArgsChar6[256], InArgsChar7[256], inargschar 8[256] //Se utiliza para pasar el contenido del parámetro.
¿ULONGO? InArgs1Len, InArgs2Len, InArgs3Len, InArgs4Len//La longitud de caracteres del parámetro entrante
ULONG? InArgs5Len, InArgs6Len, InArgs7Len, InArgs8Len//La longitud de caracteres del parámetro entrante
¿Nos molesta? =?SRV _ parámetros RPC (psrv proc);?
sprintf_s(InArgsChar1, sizeof(InArgsChar1), " s ", (const? char*)srv_paramdata(pSrvProc, ?1));
sprintf_s(InArgsChar2, sizeof(InArgsChar2) , " s ", (const? char*)srv_paramdata(pSrvProc, ?2));
sprintf_s(InArgsChar3, sizeof(InArgsChar3), " s ", (const? char*)srv_paramdata(pSrvProc, 3));
sprintf_s(InArgsChar4, sizeof(InArgsChar4), " s ", (const? char*)srv_paramdata(pSrvProc, ? 4)); , sizeof(InArgsChar5), " s ", (const? char*)srv_paramdata(pSrvProc, ? 5));
sprintf_s(InArgsChar6, sizeof(InArgsChar6), " s ", (const? char* )srv_paramdata(pSrvProc,?6));
sprintf_s(InArgsChar7, sizeof(InArgsChar7), " s ", (const?char*)srv_paramdata(pSrvProc,?7));
sprintf_s(InArgsChar8, sizeof(InArgsChar8), "s", (const?char*)srv_paramdata(pSrvProc,?8));
InArgs1Len? =?srv_paramlen(pSrvProc,?1);
InArgs2Len? =?srv_paramlen(pSrvProc,?2);
InArgs3Len? =?srv_paramlen(pSrvProc,?3);
InArgs4Len? =?srv_paramlen(pSrvProc,?4);
InArgs5Len? =?srv_paramlen(pSrvProc,?5);
InArgs6Len? =?srv_paramlen(pSrvProc,?6);
InArgs7Len? =?srv_paramlen(pSrvProc,?7);
InArgs8Len? =?srv_paramlen(pSrvProc,?8);
if(InArgsChar1[0]?==?0') {/# # # # # # #Función (0), prueba de función# # # # # #
srv_describe(
pSrvProc? 1, "NO1",? ¿SRV_NULLTERM? SRVCHAR,? EnArgs1Len,? SRVCHAR,? EnArgs1Len,? (void *)inargschar 1);
srv_describe(pSrvProc,?2,?"NO2",?SRV_NULLTERM,?SRVCHAR,?InArgs2Len,?SRVCHAR,?InArgs2Len,?(void *)inargchar 2) ;
srv_describe(pSrvProc,?3,?"NO3",?SRV_NULLTERM,?SRVCHAR,?InArgs3Len,?SRVCHAR,?InArgs3Len,?(void *)inargchar 3);
srv_describe(pSrvProc,?4,?"NO4",?SRV_NULLTERM,?SRVCHAR,?InArgs4Len,?SRVCHAR,?InArgs4Len,?(void *)inargchar 4);
srv_describe(pSrvProc,?5 ,?"NO5",?SRVCHAR,?InArgs5Len,?(void *)inargchar 5);
srvProc,?"6", ?SRV_NULLTERM,?InArgs6Len,?(void *)inargchar 6);
srv_describe(pSrvProc,? InArgs7Len,?SRVCHAR,?(void *)inargchar 7);
srv_describe(pSrvProc,?8,?SRV_NULLTERM,?InArgs8Len,?SRVCHAR,? InArgs8Len, ? (void *)inargchar 8);
SRV _ sendrow(pSrvProc);
sprintf _ s(reargstr, sizeof(reargstr), "¿Hola? ¡palabra!") ;
Lierslen? =?(ULONG)strlen(ReArgsStr);
REBZ[0]? =?0; srv_paramsetoutput(pSrvProc, 9, (BYTE *) REBZ, 1, FALSO);
srv_paramsetoutput (pSrvProc, 10, (BYTE *)reargstr, ReArgsLen,
srv_senddone(pSrvProc,?SRV_DONE_FINAL,?0,?0);
/*
¿Declaración? @ab? CHAR(65)
¿EJECTIVO? ¿BeyExtSt? 0 ', ' MyXXXXxxx ', ' 9911223 ', ' 2 ', ' 2 ', NULL, '', '', @ab? Salida
¿Seleccionar? @ab? ¿Como? AABB
*/
}
if(InArgsCh
ar1[0]? ==?1'){/# # # # # # # #Función (1), generar código de característica# # # # # #
// - ?....... ...omitido
}
if(InArgsChar1[0]?==?2') {/# # # # # # # #Función (2), Generar código de registro # # # # # #
// - ?.................Omitido
}
if(InArgsChar1[ 0]?==?3 '){/# # # # # # # # #Función (3), código de inicio de sesión cifrado (es necesario verificar el registro)# # # # # #
// - ?............Omitido
}
if(InArgsChar1[0]?==?4 '){ /# # # # # # # # #Función (4), traduce el código de inicio de sesión nuevamente (es necesario verificar el registro)# # # # # #
// - ?........ .... ...Omitido
}
¿Devolver? XP_ERROR
}