Имя: Пароль:
1C
1C 7.7
v7: Синтаксис SQL?
0 monsterZE
 
10.07.13
12:00
IF object_id('formatTime') IS NULL
create function formatTime(@value as char(6), @sym as char(1))
..
Неправильный синтаксис около function
Причем
IF object_id('formatTime') IS NOT NULL
DROP FUNCTION formatTime
прекрасно работает.. ?8-\
1 mikecool
 
10.07.13
12:03
может на из нул не проходит проверка?
2 monsterZE
 
10.07.13
12:03
т.е. в разных запросах все гуд (если существует - дропаю, потом в другом создаю), но почему не работает в одном?
3 monsterZE
 
10.07.13
12:04
(1) нет, оно (1с++) ругается именно на синтаксис
4 monsterZE
 
10.07.13
12:06
вот вся функция (позаимствованная) может есть какие-то нюансы?.. в операторные скобки заключал - не помогает.
   |create function formatTime(@value as char(6), @sym as char(1))
   |returns varchar(10)
   |begin
   | declare
   | @time10 bigint,
   | i int,
   | @weight bigint,
   | @ch char(1),
   | @hour int,
   | @min int,
   | @sec int
   | set @time10 = 0
   | set i = len(@value)
   | set @weight = 1
   |
   | while i > 0 begin
   | set @ch = substring(@value, i, 1)
   | set i = i - 1
   | if @ch = ' ' continue
   | if @ch < 'A'
   | set @time10 = @time10 + @weight * (ascii(@ch) - 48)
   | else
   | set @time10 = @time10 + @weight * (ascii(@ch) - 55)
   | set @weight = @weight * 36
   | end
   |
   | set @time10 = round(@time10 / 10000, 0)
   | set @hour = @time10 / 3600
   | set @time10 = @time10 % 3600
   | set @min = @time10 / 60
   | set @time10 = @time10 % 60
   | set @sec = @time10
   |
   | return replace(str(@hour, 2, 0) + @sym + str(@min, 2, 0) + @sym + str(@sec, 2, 0), ' ', '0')
   |end";
5 mikecool
 
10.07.13
12:06
(3) в QA hf,jnftn&
6 mikecool
 
10.07.13
12:06
+5 в QA работает?
7 monsterZE
 
10.07.13
12:08
(6) неа тоже самое - кривой синтаксис
8 monsterZE
 
10.07.13
12:13
синтаксис именно с криейт-функшен связан бо
IF object_id('formatTime') IS NOT NULL
Select 1
отрабатывает как надо (убираю NOT)
9 1Сергей
 
10.07.13
12:14
(8) вставь NOT до  object_id('formatTime')
10 monsterZE
 
10.07.13
12:21
(9) ничего не изменилось
11 1Сергей
 
10.07.13
12:23
(10) IF  NOT object_id('formatTime') IS NULL

так не работает?
12 monsterZE
 
10.07.13
12:25
(11) с Create Function - нет
c Select - работает
13 Ёпрст
 
10.07.13
12:26
а так ?

IF OBJECT_ID(N'dbo.formatTime', N'TF') IS NOT NULL
   DROP FUNCTION dbo.formatTime;
GO
CREATE FUNCTION dbo.formatTime(@value as char(6), @sym as char(1))
14 monsterZE
 
10.07.13
12:27
(13) так да.. у меня так и есть, но почему не работает без предварительного дропа функции?
15 1Сергей
 
10.07.13
12:28
(14) семён-семёныч... :))))))))
16 monsterZE
 
10.07.13
12:28
IF object_id('formatTime') IS NOT NULL
DROP FUNCTION formatTime

так она дропается и потом создается..
17 monsterZE
 
10.07.13
12:30
(15) не, ты, наверное, не понял - допустим я не хочу каждый раз пересоздавать функцию.. а проверить ее существование и НЕ создавать, если она есть. =) в один запрос.. почему-то бананза
18 monsterZE
 
10.07.13
12:31
к (17) вроде каких-то ограничений в описалове нет?..
19 КонецЦикла
 
10.07.13
12:35
RecordSet.ВыполнитьИнструкцию("IF EXISTS(SELECT name FROM sysobjects WHERE name = 'EmptyAdress') DROP FUNCTION EmptyAdress");
   
   ТекстЗапроса = "
   |CREATE FUNCTION EmptyAdress(@iddoc CHAR(9)) RETURNS bit
...
20 monsterZE
 
10.07.13
12:36
(19) =) ты тоже дропаешь перед созданием..
21 КонецЦикла
 
10.07.13
12:41
А чо сервер жалеть...
22 КонецЦикла
 
10.07.13
12:42
Вот еще как делал когда-то...

   ТекстЗапроса = "
   |IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[Plan_goodsUpdate]'))
   |SELECT 1
   |ELSE
   |SELECT 0
   |";
   
   ТЗ = RecordSet.ВыполнитьИнструкцию(ТекстЗапроса);
   
   Существует = ТЗ.ПолучитьЗначение(1, 1);
   
   Если Существует = 0 Тогда
       ТекстЗапроса = "
       |CREATE TRIGGER [Plan_goodsUpdate] ON [dbo].[Plan_goods]
23 monsterZE
 
10.07.13
12:44
(21) ну так то - да.. хотел узнать, может чего не так делаю..
видимо все-таки есть какие-то ограничения на создание функции по условию
(22) я тоже так сегодня делал =) тока выполнитьСкалярный
24 КонецЦикла
 
10.07.13
12:44
Вот не помню что там насчет одного запроса если честно, наверное тоже потыркался немного и забросил
25 monsterZE
 
10.07.13
12:47
ну если кто чего нароет - апните тему плиз =) просто интересно
(сам тоже покопаю..)
26 КонецЦикла
 
10.07.13
13:00
27 monsterZE
 
10.07.13
13:02
(26) спасибо! =)
28 КонецЦикла
 
10.07.13
13:04
(27) Падалута. Меня как-то другое больше заботило, поэтому на этих вопросах не заморачивался
29 Ёпрст
 
10.07.13
13:05
прикольно с SET NOEXEC OFF
30 Ёпрст
 
10.07.13
13:08
надо записать где-нить.
31 Jaap Vduul
 
10.07.13
13:09
Потому что инструкция create должна идти отдельным батчем.
Можно динамик-sql bcgjльзовать.
32 monsterZE
 
10.07.13
13:10
(31) да, в (26) как раз нужную тему подогнал =)
33 Jaap Vduul
 
10.07.13
13:12
•CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE SCHEMA, CREATE TRIGGER, and CREATE VIEW statements cannot be combined with other statements in a batch. The CREATE statement must start the batch. All other statements that follow in that batch will be interpreted as part of the definition of the first CREATE statement.

http://msdn.microsoft.com/en-us/library/ms175502(v=sql.105).aspx
Основная теорема систематики: Новые системы плодят новые проблемы.