[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Динамические переменные
zvezda_t
Здравствуйте, уважаемые программисты!

Скажите пожалуйста, можно ли в цикле переписать данные запросы?

ALTER PROCEDURE [dbo].[Proc_Doc]
@id_user int,
@sum1 money,
@sum2 money,
@sum3 money,
@type_doc1 int,
@type_doc2 int,
@type_doc3 int
AS
BEGIN

IF @type_doc1 IS NOT NULL
INSERT INTO
dbo.doc (id_user,type_doc, sum, del) VALUES(@id_user,'1', @sum1, @type_doc1);

IF @type_doc2 IS NOT NULL
INSERT INTO
dbo.doc (id_user,type_doc, sum, del) VALUES(@id_user,'2', @sum2, @type_doc2);

IF @type_doc3 IS NOT NULL
INSERT INTO
dbo.doc (id_user,type_doc, sum, del) VALUES(@id_user,'3', @sum3, @type_doc3);

end




Спустя 1 день, 43 минуты, 19 секунд (23.12.2010 - 12:48) zvezda_t написал(а):
делаю через xml, но когда запускаю отдельно запрос, всё работает.
Когда передаю параметр @Params в процедуру, выходит ошибка:

declare
@Params xml

set @Params = '
<Root>
<Row>
<sum>27</sum>
<type_doc>1</type_doc>
</Row>
<Row>
<sum>69</sum>
<type_doc>2</type_doc>
</Row>
<Row>
<sum>75</sum>
<type_doc>3</type_doc>
</Row>
</Root>'


INSERT INTO dbo.doc (id_user, type_doc, sum)
SELECT
@id_user,
T.item.value('(type_doc)[1]', 'int'),
T.item.value('(sum)[1]', 'money')
FROM
@Params.nodes('Root/Row') AS T(item)


Цитата
INSERT failed because the following SET options have incorrect settings: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or query notifications and/or xml data type methods.

Спустя 2 часа, 40 минут, 54 секунды (23.12.2010 - 15:29) zvezda_t написал(а):
1)скрипт процедуры, которой делаю вставку данных
<?php 
$m_tel=array(89167869031,89167869032,89167869033);
$m_sms=array(111,222,333);

$Params = "'<Root>";
for($j=0;$j<=5;$j++)
{
if(!empty($m_tel[$j]))
$Params .= "<Row>
<tel>"
.$m_tel[$j]."</tel>
<sms>"
.$m_sms[$j]."</sms>
</Row>"
;
}
$Params .="</Root>'";
$Params=htmlspecialchars($Params);
mssql_query("EXECUTE dbo.ProcedureSMS @Params=".$Params);
print ("EXECUTE dbo.ProcedureSMS @Params=".$Params);
/*
выводит:
EXECUTE dbo.ProcedureSMS @Params='<Root><Row> <tel>89167869031</tel> <sms>111</sms> </Row><Row> <tel>89167869032</tel> <sms>222</sms> </Row><Row> <tel>89167869033</tel> <sms>333</sms> </Row></Root>'
*/

?>



2)скрипт таблицы, куда делается вставка

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[sms](
[
RECID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[
TELNUM] [char](11) NULL,
[
SMSTEXT] [char](160) NULL,
[
ISSENDED] [int] NULL,
[
ISDELIVERED] [int] NULL,
CONSTRAINT [PK_sms] PRIMARY KEY CLUSTERED
(
[
RECID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ON [PRIMARY]

GO
SET ANSI_PADDING OFF


3)процедура

USE [BASE_TEST]
GO

ALTER PROCEDURE [dbo].[ProcedureSMS]
-- Add the parameters for the stored procedure here
@Params xml
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Установка параметров (тип данных XML)
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF
SET QUOTED_IDENTIFIER ON


INSERT INTO dbo.sms (TELNUM, SMSTEXT)
SELECT
T.item.value('(tel)[1]', 'char(11)'),
T.item.value('(sms)[1]', 'char(160)')
FROM
@Params.nodes('Root/Row') AS T(item)
END

Спустя 2 минуты, 30 секунд (23.12.2010 - 15:32) zvezda_t написал(а):
не хочет процедура из php запускаться, на сервере SQL сразу запускается(
в чем дело?

Спустя 7 минут, 21 секунда (23.12.2010 - 15:39) Basili4 написал(а):
попробуй без параметра
вставь строку <Root><Row> <tel>89167869031</tel> <sms>111</sms> </Row><Row> <tel>89167869032</tel> <sms>222</sms> </Row><Row> <tel>89167869033</tel> <sms>333</sms> </Row></Root>

в код процедуры.

если будет работать.

то дело в кодировке. Используется кирилица ???

Спустя 18 минут, 6 секунд (23.12.2010 - 15:57) zvezda_t написал(а):
дело было в $Params=htmlspecialchars($Params);
убрала и всё заработало)

фуф... если долго мучиться что-нибудь получиться... smile.gif

Спустя 12 минут, 56 секунд (23.12.2010 - 16:10) Basili4 написал(а):
Пилите, Шура, пилите она золотая. smile.gif


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.