Red de conocimiento informático - Conocimiento informático - Procedimiento almacenado extendido de MS SQL Server con parámetros, ¿cómo pasar parámetros?

Procedimiento almacenado extendido de MS SQL Server con parámetros, ¿cómo pasar parámetros?

1. Al llamar a procedimientos almacenados extendidos en MS SQL Server, los parámetros entrantes y salientes son los mismos que los de los procedimientos almacenados normales.

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

}