Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как передать параметры в хранимую процедуру используя XML  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
MS SQL Server 2005 SP3

Всем доброго времени суток!
У меня такой вопрос - как можно передать параметры в хранимую процедуру с XML-файла?
24 июл 09, 14:42    [7456966]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
Glory
Member

Откуда:
Сообщений: 104760
Закачать файл в таблицу ?
24 июл 09, 14:45    [7456989]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
Glory,

Нет.
Есть XML-файл, в котором прописиваються некие параметры. Как ети параметры передать в хранимую процедуру?

Пример XML-файла:

<validations>
	<validation1 type="duplicate">
		<table1 name="customers">
			<pkcolumn name="Company_Code"/>
			<pkcolumn name="Customer_Key"/>
		</table1>
		<table2 name="products">
			<pkcolumn name="Company_Code"/>
			<pkcolumn name="Material"/>
		</table2>
		<table3 name="orders">
			<pkcolumn name="Company_Code"/>
			<pkcolumn name="Sales_Doc_Item"/>
			<pkcolumn name="Sales_Doc"/>
			<pkcolumn name="Customer_Key"/>
			<pkcolumn name="Created_on"/>
		</table3>
	</validation1>
	<validation2 type="reference">
		<table1 master="orders" referenced="customers">
			<fkcolumn master="Company_Code" referenced="Company_Code"/>
			<fkcolumn master="Customer_Key" referenced="Customer_Key"/>
		</table1>
		<table2 master="orders" referenced="customers">
			<fkcolumn master="Sold_To" referenced="Customer_Key"/>
		</table2>
		<table3 master="orders" referenced="customers">
			<fkcolumn master="Ship_To" referenced="Customer_Key"/>
		</table3>
		<table4 master="orders" referenced="products">
			<fkcolumn master="Company_Code" referenced="Company_Code"/>
			<fkcolumn master="Material_Entered" referenced="Material"/>
		</table4>
	</validation2>
</validations>
24 июл 09, 14:53    [7457081]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
Glory
Member

Откуда:
Сообщений: 104760
SoMaL
Glory,

Нет.
Есть XML-файл, в котором прописиваються некие параметры. Как ети параметры передать в хранимую процедуру?

Ну так закачайте файл. И прочитайте из него все, что нужно. И вызовите процедуру.
24 июл 09, 14:55    [7457105]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
Glory,

Тоесть, каждый раз если, к примеру, я хочу сменить наву таблиц или их количество, мне заново необходимо будет закачивать файл в базу?
24 июл 09, 15:05    [7457205]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
create procedure loadparams  
   @params nvarchar(4000)
AS

SET NOCOUNT ON
declare @result int, @hdoc int

exec @result = sp_xml_preparedocument @hdoc output, @params
if @result = 0
Begin
/*обрабатываем xml, читаем параметры и тп*/

select ...
for openxml(@hdoc, '//validation1/table1', 1) ...

End 
exec sp_xml_removedocument @hdoc
go
24 июл 09, 15:08    [7457228]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
Glory
Member

Откуда:
Сообщений: 104760
SoMaL
Glory,

Тоесть, каждый раз если, к примеру, я хочу сменить наву таблиц или их количество, мне заново необходимо будет закачивать файл в базу?

А вы как хотели ?
Чтобы текстовый xml-файл вдруг сам создал коннект к sql server-у и запустил на нем процедуру ?
24 июл 09, 15:08    [7457235]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
Как витащить даные с XML-файла я знаю.
Эта процедура должна проверять валидность данных в тех таблицах, какие прописаны в XML-файле.
Вопрос - как как в процедуру передавать навы таблиц и колонок?
24 июл 09, 15:41    [7457564]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
Назвы таблиц и колонок задаються в XML-файле.
24 июл 09, 15:42    [7457578]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
Glory
Member

Откуда:
Сообщений: 104760
SoMaL
Как витащить даные с XML-файла я знаю.
Эта процедура должна проверять валидность данных в тех таблицах, какие прописаны в XML-файле.
Вопрос - как как в процедуру передавать навы таблиц и колонок?

Ну так какая проблема передать в процедуру что-то, если вы знаете "уак витащить даные с XML-файла" ? Вытащите оттуда названия таблиц и колонок и передайте в процедуру
24 июл 09, 15:45    [7457608]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
Glory,

Проблема в том, что этого я не знаю.

Вот, к примеру

/*
создаю таблицу, где сохраняеться XML-фал
*/

CREATE TABLE [dbo].[test](
      [id] [int] NULL,
      [val] [xml] NULL)

/*
загружаю его в таблицу
*/

insert into dbo.test
select 1,
'<validations>
	<validation1 type="duplicate">
		<table1 name="customers">
			<pkcolumn name="Company_Code"/>
			<pkcolumn name="Customer_Key"/>
		</table1>
		<table2 name="products">
			<pkcolumn name="Company_Code"/>
			<pkcolumn name="Material"/>
		</table2>
		<table3 name="orders">
			<pkcolumn name="Company_Code"/>
			<pkcolumn name="Sales_Doc_Item"/>
			<pkcolumn name="Sales_Doc"/>
			<pkcolumn name="Customer_Key"/>
			<pkcolumn name="Created_on"/>
		</table3>
	</validation1>
	<validation2 type="reference">
		<table1 master="orders" referenced="customers">
			<fkcolumn master="Company_Code" referenced="Company_Code"/>
			<fkcolumn master="Customer_Key" referenced="Customer_Key"/>
		</table1>
		<table2 master="orders" referenced="customers">
			<fkcolumn master="Sold_To" referenced="Customer_Key"/>
		</table2>
		<table3 master="orders" referenced="customers">
			<fkcolumn master="Ship_To" referenced="Customer_Key"/>
		</table3>
		<table4 master="orders" referenced="products">
			<fkcolumn master="Company_Code" referenced="Company_Code"/>
			<fkcolumn master="Material_Entered" referenced="Material"/>
		</table4>
	</validation2>
</validations>'



/*
получаю название таблици
*/

declare @TableName varchar(20)

select @TableName = t.c.value('@name', 'varchar(30)')
from test
cross apply val.nodes('validations/validation1/table1')t(c)



/*
а теперь пытаюсь написать запрос с использованием названия таблици
*/

select *
from @TableName


Получаю сообщение:
Msg 1087, Level 15, State 2, Line 14
Must declare the table variable "@TableName".

Что я делаю не правильно?
Или, может, я упустил кое-что?
24 июл 09, 15:58    [7457740]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
Glory
Member

Откуда:
Сообщений: 104760
https://www.sql.ru/faq/faq_topic.aspx?fid=104
24 июл 09, 16:01    [7457754]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
select @TableName as [TableName]
24 июл 09, 16:02    [7457766]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31200
SoMaL
/*
а теперь пытаюсь написать запрос с использованием названия таблици
*/

select *
from @TableName


Получаю сообщение:
Msg 1087, Level 15, State 2, Line 14
Must declare the table variable "@TableName".

Что я делаю не правильно?
Или, может, я упустил кое-что?
Вам нужно использовать динамический SQL.

А ещё лучьше отказаться от хранения имён таблиц и полей и работы с ними таким образом. Вы выбрали плохую архитектуру системы.
24 июл 09, 16:02    [7457770]     Ответить | Цитировать Сообщить модератору
 Re: Как передать параметры в хранимую процедуру используя XML  [new]
SoMaL
Member

Откуда: Львов, Украина
Сообщений: 38
Glory,

Огромное спасибо!
Разобрался
27 июл 09, 16:11    [7465113]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить