|
Процедура разбивки строки на слова для sql server
#34854139
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
помогите написать процедуру у которой вх. параметры - адрес массива, строка для разбивки, разделитель, а вых. параметр - табличка с полученными словами.
Допустим вот процедура которая выводит массив, помогить ее модифицировать, мои познания в с++ оставляют желать лучшего
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84.
RETCODE __declspec(dllexport) xp_listarray(SRV_PROC *srvproc)
{
int nParams;
int index;
int handle;
int size;
int len;
char* emptystr = "";
PBYTE* array = NULL;
PBYTE* ppData = NULL;
BYTE pbType;
ULONG pcbMaxLen;
ULONG pcbActualLen;
BOOL pfNull;
nParams = srv_rpcparams(srvproc);
// Check number of parameters
if (nParams != 1 ) {
// Send error message and return
srv_sendmsg(srvproc, SRV_MSG_ERROR, XP_ARRAY_ERROR, SRV_INFO, (DBTINYINT) 0 ,
NULL, 0 , 0 , "Error executing extended stored procedure: Invalid number of parameters",
SRV_NULLTERM);
// A SRV_DONE_MORE instead of a SRV_DONE_FINAL must complete the
// result set of an Extended Stored Procedure.
srv_senddone(srvproc, (SRV_DONE_ERROR | SRV_DONE_MORE), 0 , 0 );
return(XP_ERROR);
}
if (!IntParam( 1 )) {
srv_sendmsg(srvproc, SRV_MSG_ERROR, XP_ARRAY_ERROR, SRV_INFO, (DBTINYINT) 0 ,
NULL, 0 , 0 ,
"Error executing extended stored procedure: Invalid Parameter Type",
SRV_NULLTERM);
// A SRV_DONE_MORE instead of a SRV_DONE_FINAL must complete the
// result set of an Extended Stored Procedure.
srv_senddone(srvproc, (SRV_DONE_ERROR | SRV_DONE_MORE), 0 , 0 );
return(XP_ERROR);
}
srv_paraminfo(srvproc, 1 ,&pbType, &pcbMaxLen, &pcbActualLen, (BYTE *)&handle, &pfNull);
array=(PBYTE *)handle;
size=getarraysize(array);
len = 255 ;
for (index = 1 ; index < size; index++)
{
srv_describe(srvproc,
1 ,
"idx",
SRV_NULLTERM,
SRVINT4, // Dest data type.
(DBINT) sizeof(SRVINT4), // Dest data length.
SRVINT4, // Source data type.
(DBINT) sizeof(SRVINT4), // Source data length.
(PBYTE) &index);
srv_describe(srvproc,
2 ,
"value",
SRV_NULLTERM,
SRVVARCHAR, // Dest data type.
(DBINT) len, // Dest data length.
SRVVARCHAR, // Source data type.
(DBINT) len, // Source data length.
(PBYTE) NULL);
// srv_setcollen(srvproc, 1,index);
if (array[index]!=NULL) srv_setcoldata(srvproc, 2 , array[index]);
else srv_setcoldata(srvproc, 2 , emptystr);
if (srv_sendrow(srvproc) != SUCCEED) goto safeexit;
}
safeexit:
if (index > 0 )
srv_senddone(srvproc, SRV_DONE_MORE | SRV_DONE_COUNT, (DBUSMALLINT) 0 , index);
else
srv_senddone(srvproc, SRV_DONE_MORE, (DBUSMALLINT) 0 , (DBINT) 0 );
return XP_NOERROR ;
}
|
|
|