Скажите пожалуйста, можно ли в цикле переписать данные запросы?
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 в процедуру, выходит ошибка:
Когда передаю параметр @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)скрипт процедуры, которой делаю вставку данных
2)скрипт таблицы, куда делается вставка
3)процедура
<?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>
в код процедуры.
если будет работать.
то дело в кодировке. Используется кирилица ???
вставь строку <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);
убрала и всё заработало)
фуф... если долго мучиться что-нибудь получиться...
убрала и всё заработало)
фуф... если долго мучиться что-нибудь получиться...

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

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