|
|
|
Передать в SP массив
|
|||
|---|---|---|---|
|
#18+
Есть переменное число условий (может быть любое количество), которые надо передать в sp. Кроме как передавать строку у меня дргих мыслей нет. Кроме того, этот вариант не очень подходит - длина строки ограничена (по-моему 8 Кб), и есть неплохая возможность вылететь за эти пределы... Тут эта тема уже как-то обсуждалась, но найти не могу, к сожалени, а поиск пока не работает... Помогите. или киньте ссылочку на топик, если у кого он сохранился... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2002, 12:50:50 |
|
||
|
Передать в SP массив
|
|||
|---|---|---|---|
|
#18+
Если не строкой, то тока через таблицу. Вносить в нее параметры, затем вызывать SP которая уже будет обращаться к созданной (заполненной) ранее таблице и выбирать из нее параметры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2002, 14:06:55 |
|
||
|
Передать в SP массив
|
|||
|---|---|---|---|
|
#18+
Если у вас SQL2000, то вам повезло Можно в процедуру передать xml, который затем извлечь с помощью OpenXML Приблительно так if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_ArrayString2Table]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[sp_ArrayString2Table] GO CREATE PROCEDURE [dbo].[sp_ArrayString2Table] @instr text=NULL AS IF @instr IS NULL RETURN -1 DECLARE @XMLHandler int EXEC sp_xml_preparedocument @XMLHandler OUTPUT, @instr SELECT * FROM OpenXML(@XMLHandler, '//node', 0) WITH (value int '@value') EXEC sp_xml_removedocument @XMLHandler go exec [dbo].[sp_ArrayString2Table] '<root><node value="1"></node><node value="2"></node><node value="3"></node><node value="4"></node></root>' go Воторой параметер для OpenXML также можно передавать в процедуру, что теоритически дает возможность создать универсальную процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2002, 14:14:49 |
|
||
|
Передать в SP массив
|
|||
|---|---|---|---|
|
#18+
>Можно в процедуру передать xml, который затем извлечь с помощью OpenXML хорошая мысль. Но в реализации возникли проблемы: было бы все здорово, если бы сработала следующая схема: на клиентской части есть ADO-рекордсет, делаем ему Save в формате xml, затем запихиваем полученный xml на сервер, а далее все как и посоветовано. Но к сожалению, из того xml, который получается на клиенте, я упорно не могу заставить сервер извлечь какие-то данные. Вот уже второй час бьюсь - результат 0... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2002, 17:20:31 |
|
||
|
Передать в SP массив
|
|||
|---|---|---|---|
|
#18+
>Можно в процедуру передать xml, который затем извлечь с помощью OpenXML хорошая мысль. Но в реализации возникли проблемы: было бы все здорово, если бы сработала следующая схема: на клиентской части есть ADO-рекордсет, делаем ему Save в формате xml, затем запихиваем полученный xml на сервер, а далее все как и посоветовано. Но к сожалению, из того xml, который получается на клиенте, я упорно не могу заставить сервер извлечь какие-то данные. Вот уже второй час бьюсь - результат 0... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2002, 17:20:47 |
|
||
|
Передать в SP массив
|
|||
|---|---|---|---|
|
#18+
Ура! Заработало! Достаточно было поправить строчку EXEC sp_xml_preparedocument @XMLHandler OUTPUT, @instr вот так EXEC sp_xml_preparedocument @XMLHandler OUTPUT, @instr, @instr После этого xml, сохраненный из ADODB.Recordset нормально парсится на MSSQLServere. В деталях я не разбирался - не хватает основательных знаний XML. Но работает и это главное! Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2002, 18:28:37 |
|
||
|
Передать в SP массив
|
|||
|---|---|---|---|
|
#18+
>Но к сожалению, из того xml, который получается на >клиенте, я упорно не могу заставить сервер извлечь какие- >то данные. >Вот уже второй час бьюсь - результат 0... Интересно. Могли бы вы привести пример вашего xml. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2002, 00:06:33 |
|
||
|
Передать в SP массив
|
|||
|---|---|---|---|
|
#18+
>Интересно. Могли бы вы привести пример вашего xml. Запросто, вот весь текст на стороне клиента на VB: Dim rsParam As ADODB.Recordset Dim rs As ADODB.Recordset Dim cm As ADODB.Command Dim p As ADODB.Parameter Dim s As Stream Dim f As String Set rsParam = New Recordset Call rsParam.Fields.Append("ParamName", adVarChar, 100, adFldUpdatable) Call rsParam.Fields.Append("ParamValue", adInteger, , adFldUpdatable) rsParam.Open rsParam.AddNew rsParam.Fields(0).Value = "test" rsParam.Fields(1).Value = "100" rsParam.Update rsParam.AddNew rsParam.Fields(0).Value = "test1" rsParam.Fields(1).Value = "101" rsParam.Update rsParam.AddNew rsParam.Fields(0).Value = "test2" rsParam.Fields(1).Value = "102" rsParam.Update rsParam.AddNew rsParam.Fields(0).Value = "test3" rsParam.Fields(1).Value = "103" rsParam.Update Set s = New Stream rsParam.Save s, adPersistXML f = s.ReadText в итоге в переменной f получаем такое: <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema'> <s:Schema id='RowsetSchema'> <s:ElementType name='row' content='eltOnly' rs:updatable='true'> <s:AttributeType name='ParamName' rs:number='1' rs:write='true'> <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='100' rs:precision='0' rs:maybenull='false'/> </s:AttributeType> <s:AttributeType name='ParamValue' rs:number='2' rs:write='true'> <s:datatype dt:type='int' dt:maxLength='4' rs:precision='0' rs:fixedlength='true' rs:maybenull='false'/> </s:AttributeType> <s:extends type='rs:rowbase'/> </s:ElementType> </s:Schema> <rs:data> <rs:insert> <z:row ParamName='test' ParamValue='100'/> <z:row ParamName='test1' ParamValue='101'/> <z:row ParamName='test2' ParamValue='102'/> <z:row ParamName='test3' ParamValue='103'/> </rs:insert> </rs:data> </xml> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2002, 11:19:40 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32031875&tid=1822480]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 499ms |

| 0 / 0 |
