Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Осваиваю sql)))) (число прочтений - 5576 )
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Осваиваю sql))))
26. Октября 2007 :: 04:49
Печать  
Как должна быть написана хранимка и как к ней нужно обратиться, чтоб получить из неё результат - набор строк (select)?
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Осваиваю sql))))
Ответ #1 - 26. Октября 2007 :: 04:54
Печать  
DionX писал(а) 26. Октября 2007 :: 04:49:
Как должна быть написана хранимка и как к ней нужно обратиться, чтоб получить из неё результат - набор строк (select)?

Хранимые процедуры могут возвращать только число!
В процедуры пожно передавать параметры по ссылке OUTPUT
Для возврата набора строк используются табличные функции,
Смотри синтаксис CREATE FUNCTION
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #2 - 26. Октября 2007 :: 04:56
Печать  
Nick писал(а) 26. Октября 2007 :: 04:54:
Для возврата набора строк используются табличные функции,

Это какие?
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #3 - 26. Октября 2007 :: 05:03
Печать  
Т.е. идея обработать на сервере (в хранимке?) данные и вернуть 1с уже сформированный набор строк. Как?
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #4 - 26. Октября 2007 :: 05:04
Печать  
Nick писал(а) 26. Октября 2007 :: 04:54:
Смотри синтаксис CREATE FUNCTION

угу, пошёл смареть))) спасиб
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Осваиваю sql))))
Ответ #5 - 26. Октября 2007 :: 05:05
Печать  
DionX писал(а) 26. Октября 2007 :: 05:03:
Т.е. идея обработать на сервере (в хранимке?) данные и вернуть 1с уже сформированный набор строк. Как?

Вот пример из BOL
USE pubs
GO
CREATE FUNCTION SalesByStore (@storeid varchar(30))
RETURNS TABLE
AS
RETURN (SELECT title, qty
     FROM sales s, titles t
     WHERE s.stor_id = @storeid and
     t.title_id = s.title_id)
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #6 - 26. Октября 2007 :: 05:10
Печать  
кажись то что надо, пасибки
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #7 - 26. Октября 2007 :: 05:18
Печать  
Код
Выбрать все
ALTER FUNCTION [dbo].[Calculation]
(
	@NameTables varchar (10)
)
RETURNS TABLE
AS
RETURN
(
	SELECT * FROM _1SCONST
)
GO
 



Код
Выбрать все
тз=РС.ВыполнитьИнструкцию("select * from Calculation");
тз.ВыбратьСтроку();
 



Код
Выбрать все
тз=РС.ВыполнитьИнструкцию("Calculation");
тз.ВыбратьСтроку();
 



результат:
Цитата:
тз.ВыбратьСтроку();
{F:\РАБПАПКА\КООПЕРАТИВ\1SKOOPSQL\111.ERT(12)}: Значение не представляет агрегатный объект (ВыбратьСтроку)


Что не так?
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Осваиваю sql))))
Ответ #8 - 26. Октября 2007 :: 05:38
Печать  
тз=РС.ВыполнитьИнструкцию("select * from dbo.Calculation()");
тз.ВыбратьСтроку();

А так?
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #9 - 26. Октября 2007 :: 05:41
Печать  
Nick писал(а) 26. Октября 2007 :: 05:38:
тз=РС.ВыполнитьИнструкцию("select * from dbo.Calculation()");
тз.ВыбратьСтроку();

А так?

тоже самое(((
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Осваиваю sql))))
Ответ #10 - 26. Октября 2007 :: 05:48
Печать  
Проверь в Query Analizer
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Осваиваю sql))))
Ответ #11 - 26. Октября 2007 :: 05:58
Печать  
тз=РС.ВыполнитьИнструкцию("select * from dbo.Calculation('dfdfgfdfdfsdsd')");
тз.ВыбратьСтроку();

Ты описал параметр  функции но не передаеёщь его
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #12 - 26. Октября 2007 :: 09:29
Печать  
да не, зн. параметра я устанавливал как
Код
Выбрать все
	РС.ДобПараметр(1,15,8,,"@NameTables");
	РС.УстПараметр(1,"ццвц");
 


пробовал и твоим способом: толку 0.

Вот такой эксперемент:
Код
Выбрать все
Create PROCEDURE Itogi2
AS
BEGIN
	SET NOCOUNT ON;
--	declare @q varchar(max)
----------------------------------------------------------------
	create table tmpProvodky (
			Dat DateTime,
			ACC varchar(9),
			SCHKOD varchar(10),
			Kontr varchar(9),
			Dor varchar(9),
			Summ	decimal(15,2))
----------------------------------------------------------------
END
GO
 


Потом:
Код
Выбрать все
РС.ВыполнитьИнструкцию("exec [dbo].[Itogi2]")
 


Потом проверяем на сервере наличие таблицы tmpProvodky - а её там нет((((
Ошибок ни каких ни выдаётся(((
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #13 - 26. Октября 2007 :: 09:34
Печать  
в анализере команда
Код
Выбрать все
EXEC	[dbo].[Itogi2] 


отрабатывает нормально, таблица tmpProvodky создаётся

на всякий случай:
1срр - одна из последних ночных сборок (от 19 по моему)
1с 25-ая
sql - 2005 экспрес (мож в этом дело?)
ну и:
Код
Выбрать все
RS=СоздатьОбъект("ODBCRecordset");
RS.УстБД1С(); 

  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Осваиваю sql))))
Ответ #14 - 26. Октября 2007 :: 10:22
Печать  
спасибо всем кто был со мной...
допёрло под 19 часов пятницы:
Код
Выбрать все
РС.УстановитьТекстовыйПараметр("Data1",СделатьДату(ТекущаяДата()-60));
РС.УстановитьТекстовыйПараметр("Data2",СделатьДату(ТекущаяДата()));
............
РС.ВыполнитьИнструкцию("{call Itogi(:Data1,:Data2,:PlanId,:Schet,:Kontr,:IdDog)}");
 


фу, мля... дамой поехал))))
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать