|
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |