Topic: MSSQL can not create stored function
|
|
MatveevAndrey
User
 Expert Boarder
| Posts: 52 |   | Karma: 1 |
|
MSSQL can not create stored function
|
|
Posted: 2008/01/29 04:22 |
|
|
|
|
Hello, Diman
i've got a problem trying to create a function using the script file (using the adexecutor tool)
here is the sql file:
SET CMDSEP ;
SET ECHO ON ALL TRIM 100
USE MYDB ;
IF EXISTS (select 1 from dbo.sysobjects where id = object_id('[dbo].[inet_aton]') )
DROP FUNCTION [dbo].[inet_aton] ;
CREATE FUNCTION [dbo].[inet_aton] (@IP VARCHAR(15))
RETURNS BIGINT AS
BEGIN
DECLARE @A BIGINT, @B BIGINT, @C BIGINT, @D BIGINT
DECLARE @iBegin INT, @iEnd INT
SELECT @iBegin=1
SELECT @iEnd=CHARINDEX('.', @IP)
SELECT @A=CAST(SUBSTRING(@IP, @iBegin, @iEnd-@iBegin) AS BIGINT)
SELECT @iBegin=@iEnd+1
SELECT @iEnd=CHARINDEX('.', @IP, @iBegin)
SELECT @B=CAST(SUBSTRING(@IP, @iBegin, @iEnd-@iBegin) AS BIGINT)
SELECT @iBegin=@iEnd+1
SELECT @iEnd=CHARINDEX('.', @IP, @iBegin)
SELECT @C=CAST(SUBSTRING(@IP, @iBegin, @iEnd-@iBegin) AS BIGINT)
SELECT @iBegin=@iEnd+1
SELECT @iEnd=CHARINDEX('.', @IP, @iBegin)
SELECT @D=CAST(SUBSTRING(@IP, @iBegin, 15) AS BIGINT)
DECLARE @IPNumber BIGINT
SELECT @IPNumber=@A*16777216+@B*65536+@C*256+@D
RETURN @IPNumber
END ;
|
The error message is:
CREATE FUNCTION [dbo].[inet_aton] (@IP VARCHAR(15))
RETURNS BIGINT AS
BEGIN
DECLARE @A BIG ...
ERROR: SQL state: 42000. Native error: 156. Error message:
[Microsoft][SQL Native Client][SQL Server]Неправильный синтаксис около ключевого слова "CREATE".
however, if I type the same function in AdExecutor GUI it works and the function has been created
any suggestions?
|
|
Diman
Admin
 Admin
| Posts: 1460 |  | Karma: 18 |
|
Re:MSSQL can not create stored function
|
|
Posted: 2008/01/30 00:05 |
|
|
|
|
Hello
1) Replace ';' command separator with GO, for example. That should work. 2) I will fix this issue.
Regards, Dmitry
|
|
MatveevAndrey
User
 Expert Boarder
| Posts: 52 |   | Karma: 1 |
|
Re:MSSQL can not create stored function
|
|
Posted: 2008/01/30 07:30 |
|
|
|
|
Hi, there
unfortunately, it doesn't fix the issue 
if i do:
SET CMDSEP GO
SET ECHO ON ALL TRIM 100
USE ESERV3 GO
IF EXISTS (select 1 from dbo.sysobjects where id = object_id('[dbo].[inet_aton]') )
DROP FUNCTION [dbo].[inet_aton] GO
CREATE FUNCTION [dbo].[inet_aton] (@IP VARCHAR(15))
RETURNS BIGINT AS
BEGIN
DECLARE @A BIGINT, @B BIGINT, @C BIGINT, @D BIGINT
DECLARE @iBegin INT, @iEnd INT
SELECT @iBegin=1
SELECT @iEnd=CHARINDEX('.', @IP)
SELECT @A=CAST(SUBSTRING(@IP, @iBegin, @iEnd-@iBegin) AS BIGINT)
SELECT @iBegin=@iEnd+1
SELECT @iEnd=CHARINDEX('.', @IP, @iBegin)
SELECT @B=CAST(SUBSTRING(@IP, @iBegin, @iEnd-@iBegin) AS BIGINT)
SELECT @iBegin=@iEnd+1
SELECT @iEnd=CHARINDEX('.', @IP, @iBegin)
SELECT @C=CAST(SUBSTRING(@IP, @iBegin, @iEnd-@iBegin) AS BIGINT)
SELECT @iBegin=@iEnd+1
SELECT @iEnd=CHARINDEX('.', @IP, @iBegin)
SELECT @D=CAST(SUBSTRING(@IP, @iBegin, 15) AS BIGINT)
DECLARE @IPNumber BIGINT
SELECT @IPNumber=@A*16777216+@B*65536+@C*256+@D
RETURN @IPNumber
END
GO
|
I've got the following error messages:
IF EXISTS (select 1 from dbo.sysobjects where id = object_id('[dbo].[inet_aton]') ...
ERROR: SQL state: 42000. Native error: 102. Error message:
[Microsoft][SQL Native Client][SQL Server]Неправильный синтаксис около "GO".
SQL state: 42000. Native error: 111. Error message:
[Microsoft][SQL Native Client][SQL Server]CREATE FUNCTION должна быть первой инструкцией в пакетном запросе.
SQL state: 42000. Native error: 137. Error message:
[Microsoft][SQL Native Client][SQL Server]Необходимо объявить скалярную переменную "@IP".
SQL state: 42000. Native error: 137. Error message:
[Microsoft][SQL Native Client][SQL Server]Необходимо объявить скалярную переменную "@IP".
SQL state: 42000. Native error: 137. Error message:
[Microsoft][SQL Native Client][SQL Server]Необходимо объявить скалярную переменную "@IP".
SQL state: 42000. Native error: 137. Error message:
[Microsoft][SQL Native Client][SQL Server]Необходимо объявить скалярную переменную "@IP".
SQL state: 42000. Native error: 137. Error message:
[Microsoft][SQL Native Client][SQL Server]Необходимо объявить скалярную переменную "@IP".
SQL state: 42000. Native error: 137. Error message:
[Microsoft][SQL Native Client][SQL Server]Необходимо объявить скалярную переменную "@IP".
SQL state: 42000. Native error: 137. Error message:
[Microsoft][SQL Native Client][SQL Server]Необходимо объявить скалярную переменную "@IP".
SQL state: 42000. Native error: 137. Error message:
[Microsoft][SQL Native Client][SQL Server]Необходимо объявить скалярную переменную "@IP".
SQL state: 42000. Native error: 178. Error message:
[Microsoft][SQL Native Client][SQL Server]Инструкцию RETURN с возвращаемым значением нельзя использовать в данном контексте.
|
|
Diman
Admin
 Admin
| Posts: 1460 |  | Karma: 18 |
|
Re:MSSQL can not create stored function
|
|
Posted: 2008/01/30 07:32 |
|
|
|
|
1) Please use either tickets, either forum. 2) Put GO on new line:
|
|
MatveevAndrey
User
 Expert Boarder
| Posts: 52 |   | Karma: 1 |
|
Re:MSSQL can not create stored function
|
|
Posted: 2008/01/31 06:05 |
|
|
|
|
|
Right, it works. Many thanks
|
|
|