Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передать в SP массив / 8 сообщений из 8, страница 1 из 1
05.06.2002, 12:50:50
    #32031805
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в SP массив
Есть переменное число условий (может быть любое количество), которые надо передать в sp.
Кроме как передавать строку у меня дргих мыслей нет.
Кроме того, этот вариант не очень подходит - длина строки ограничена (по-моему 8 Кб), и есть неплохая возможность вылететь за эти пределы...

Тут эта тема уже как-то обсуждалась, но найти не могу, к сожалени, а поиск пока не работает... Помогите. или киньте ссылочку на топик, если у кого он сохранился...
...
Рейтинг: 0 / 0
05.06.2002, 14:06:55
    #32031816
Tabloid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в SP массив
Если не строкой, то тока через таблицу. Вносить в нее параметры, затем вызывать SP которая уже будет обращаться к созданной (заполненной) ранее таблице и выбирать из нее параметры.
...
Рейтинг: 0 / 0
05.06.2002, 14:14:49
    #32031820
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в SP массив
Если у вас 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 также можно передавать в процедуру, что теоритически дает возможность создать универсальную процедуру.
...
Рейтинг: 0 / 0
05.06.2002, 17:20:31
    #32031851
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в SP массив
>Можно в процедуру передать xml, который затем извлечь с помощью OpenXML

хорошая мысль. Но в реализации возникли проблемы:
было бы все здорово, если бы сработала следующая схема:
на клиентской части есть ADO-рекордсет, делаем ему Save в формате xml, затем запихиваем полученный xml на сервер, а далее все как и посоветовано.

Но к сожалению, из того xml, который получается на клиенте, я упорно не могу заставить сервер извлечь какие-то данные.
Вот уже второй час бьюсь - результат 0...
...
Рейтинг: 0 / 0
05.06.2002, 17:20:47
    #32031852
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в SP массив
>Можно в процедуру передать xml, который затем извлечь с помощью OpenXML

хорошая мысль. Но в реализации возникли проблемы:
было бы все здорово, если бы сработала следующая схема:
на клиентской части есть ADO-рекордсет, делаем ему Save в формате xml, затем запихиваем полученный xml на сервер, а далее все как и посоветовано.

Но к сожалению, из того xml, который получается на клиенте, я упорно не могу заставить сервер извлечь какие-то данные.
Вот уже второй час бьюсь - результат 0...
...
Рейтинг: 0 / 0
05.06.2002, 18:28:37
    #32031858
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в SP массив
Ура! Заработало!
Достаточно было поправить строчку

EXEC sp_xml_preparedocument @XMLHandler OUTPUT, @instr

вот так

EXEC sp_xml_preparedocument @XMLHandler OUTPUT, @instr, @instr

После этого xml, сохраненный из ADODB.Recordset нормально парсится на MSSQLServere. В деталях я не разбирался - не хватает основательных знаний XML. Но работает и это главное!

Спасибо!
...
Рейтинг: 0 / 0
06.06.2002, 00:06:33
    #32031875
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в SP массив
>Но к сожалению, из того xml, который получается на
>клиенте, я упорно не могу заставить сервер извлечь какие-
>то данные.
>Вот уже второй час бьюсь - результат 0...

Интересно. Могли бы вы привести пример вашего xml.
...
Рейтинг: 0 / 0
06.06.2002, 11:19:40
    #32031904
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в SP массив
>Интересно. Могли бы вы привести пример вашего 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>
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передать в SP массив / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]