Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Работает ли GO в прямых запросах? (число прочтений - 4617 )
Vitek77
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 44
Зарегистрирован: 22. Сентября 2006
Работает ли GO в прямых запросах?
06. Октября 2006 :: 08:45
Печать  
Вот текст запроса:
Код
Выбрать все
SET NOCOUNT ON
IF EXISTS (SELECT * from sysobjects WHERE name = 'Convert36To10')
	drop function dbo.Convert36To10
GO
CREATE FUNCTION dbo.Convert36To10(@Val_36 varchar(9)) Returns int
Begin
	DECLARE @j int, @len int, @Val_10 int
	DECLARE @Arr36 char(36)
	SET @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
	SET @Val_10 = 0
	SET @j = 1
	SET @Val_36 = LTrim(RTrim(@Val_36))
	SET @len = Len(@Val_36)
	while @j <= @len
	begin
		if @j <> 1
			SET @Val_10 = @Val_10 * 36
		SET @Val_10 = @Val_10 + CharIndex(Substring(@Val_36, @j ,1), @Arr36) - 1
		SET @j = @j+1
	end
	Return @Val_10
End
GO
IF EXISTS (SELECT * from sysobjects WHERE name = 'TimaDocToStr' )
	drop function dbo.TimaDocToStr
GO
CREATE FUNCTION dbo.TimaDocToStr (@DateTime char(23), @Delimiter char(1)) Returns varchar(8)
Begin
	DECLARE @strTime char(6), @hours int, @minutes int, @sec int
	SET @strTime = Substring(@DateTime, 9, 6)
	SET @sec = dbo.Convert36To10(@strTime) / 10000
	SET @hours = @sec / 3600
	SET @sec = @sec - (@hours * 3600)
	SET @minutes = @sec / 60
	SET @sec = @sec - (@minutes * 60)
	DECLARE @res varchar(8)
	if @hours < 10
		SET @res = '0' + CAST(@hours as char(1))
	else
		SET @res = CAST(@hours as char(2))
	if @minutes < 10
		SET @res = @res + @Delimiter + '0' + CAST(@minutes as char(1))
	else
		SET @res = @res + @Delimiter + CAST(@minutes as char(2))
	if @sec < 10
		SET @res = @res + @Delimiter + '0' + CAST(@sec as char(1))
	else
		SET @res = @res + @Delimiter + CAST(@sec as char(2))

	return @res
End
GO
if exists(select * from tempdb..sysobjects where id = object_id('tempdb..#StatDoc'))
        drop table #StatDoc
create table #StatDoc (IdStat tinyint, isdel tinyint, isprov tinyint)
INSERT INTO #StatDoc (IdStat, isdel, isprov) VALUES (1, 0, 0)
INSERT INTO #StatDoc (IdStat, isdel, isprov) VALUES (7, 1, 0)
INSERT INTO #StatDoc (IdStat, isdel, isprov) VALUES (2, 0, 1)
if exists(select * from tempdb..sysobjects where id = object_id('tempdb..#VidDoc'))
        drop table #VidDoc
create table #VidDoc (VidDocStr char(80), IdVidDoc char(10))
INSERT INTO #VidDoc (VidDocStr, IdVidDoc) VALUES ('ВидДокумента1', '7953')
--Все остальные документы
INSERT INTO #VidDoc (VidDocStr, IdVidDoc) VALUES ('ВидДокумента2', '8000')
SET NOCOUNT OFF
SELECT
   #StatDoc.IdStat,
   Жур.sp6781 as Статус,
	Жур.IDDoc as [Док $Документ],
	Жур.IDDocDef as Док_вид,
	#VidDoc.VidDocStr,
   CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
   dbo.TimaDocToStr(Жур.Date_Time_iddoc, ':') as ВремяДок,
	Жур.sp1005 as [Фирма $Справочник.Фирмы],
	Жур.sp8113 as [Отдел $Справочник.Отделы],
	Жур.sp1006 as [Автор $Справочник.Пользователи],
   Жур.IsMark as Удален,
	Жур.Closed as Проведен
FROM
	_1SJourn Жур
INNER JOIN #StatDoc (NOLOCK) ON
    (Жур.ismark = #StatDoc.isdel) AND
    ((Жур.Closed & 1) = #StatDoc.isprov)
INNER JOIN #VidDoc (NOLOCK) ON Жур.IDDocDef = #VidDoc.IdVidDoc

WHERE Жур.Date_Time_IDDoc >= '20060901'
 AND
Жур.Date_Time_IDDoc <= '20061006Z'
Order By
  Жур.Date_Time_IDDoc
SET NOCOUNT OFF 


в 1С вываливается с ошибкой: {E:\RAINBOW\МОИОТЧЕТЫ\4.ERT(542)}: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 4: Incorrect syntax near 'GO'
в 1CQA валится с той же ошибкой
А в QA работает.
Что делать?
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Работает ли GO в прямых запросах?
Ответ #1 - 06. Октября 2006 :: 09:03
Печать  
убрать GO
  
Наверх
 
IP записан
 
Vitek77
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 44
Зарегистрирован: 22. Сентября 2006
Re: Работает ли GO в прямых запросах?
Ответ #2 - 06. Октября 2006 :: 09:05
Печать  
DrACe писал(а) 06. Октября 2006 :: 09:03:
убрать GO

а как убрать-то? где мне тогда функции сделать?
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Работает ли GO в прямых запросах?
Ответ #3 - 06. Октября 2006 :: 09:12
Печать  
Нет такой команды (GO) в синтаксисе языка t-sql. Это директива.
Этой директивой разбивается текст запроса на отдельные батчи, и после этой команды отдается на выполнение sql-серверу.
Ее можно переопределить: QA-Tools-Options-Connections-Batch separator
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Работает ли GO в прямых запросах?
Ответ #4 - 06. Октября 2006 :: 09:13
Печать  
В контексте 1с++: после GO считать как отдельный запрос (Выполнить()).
  
Наверх
ICQ  
IP записан
 
Vitek77
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 44
Зарегистрирован: 22. Сентября 2006
Re: Работает ли GO в прямых запросах?
Ответ #5 - 06. Октября 2006 :: 09:24
Печать  
Все заработало. Спасибо большое!!!
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Работает ли GO в прямых запросах?
Ответ #6 - 06. Октября 2006 :: 12:03
Печать  
Пора уже это в FAQ заносить.  Улыбка
  
Наверх
ICQ  
IP записан
 
Vitek77
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 44
Зарегистрирован: 22. Сентября 2006
Re: Работает ли GO в прямых запросах?
Ответ #7 - 06. Октября 2006 :: 13:00
Печать  
DmitrO писал(а) 06. Октября 2006 :: 12:03:
Пора уже это в FAQ заносить.  Улыбка

а так же NO COUNT ON/OFF !!!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать