SQL Incorrect syntax near '.' 错误!

时间:2022-06-18 22:48:17

--删除测试表A
DROP TABLE a
--删除函数 F_Test_One
DROP FUNCTION F_Test_One

--创建A表
create table a
(
   id int identity(1,1) primary key,
   [name] varchar(20)
)

INSERT INTO A([name])
SELECT 'a'
union all
select 'b'

GO
--创建函数
create function dbo.F_Test_One(@name varchar(50))
returns @TempTableOne table ([name] VARCHAR(50))
as
begin
IF @name='a'
BEGIN
insert into @TempTableOne SELECT @name
END
ELSE
insert into @TempTableOne SELECT @name+'test!'

    RETURN;
end
GO
SELECT 
(
  SELECT COUNT(1) FROM dbo.F_Test_One(a.[name])
) AS ccount
FROM a


SQL SERVER  报
消息 102,级别 15,状态 1,第 4 行
Incorrect syntax near '.'.

请大家帮忙看一下!什么地方有问题!谢谢!

13 个解决方案

#1


本地SQL 没有错误,但是把存储过程放在服务器上执行时报错如:【Incorrect syntax near '.'】!

#2


LZ代码在SQL2008 R2环境测试正常.

LZ的本地SQL跟服务器上的SQL版本不一样的吧?

#3


a.[name] 把中括号去掉试试。

#4


引用 2 楼 ap0405140 的回复:
LZ代码在SQL2008 R2环境测试正常.

LZ的本地SQL跟服务器上的SQL版本不一样的吧?

我本地是SQL 2005的。服务器应该也是2005!

#5


【a.[name] 把中括号去掉试试。 】去掉了还是报同样的错误啊?纠结!

#6


引用 3 楼 maco_wang 的回复:
a.[name] 把中括号去掉试试。

去掉了还是报同样的错误啊?纠结! 

#7



SELECT @@VERSION
/*
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
Oct 14 2005 00:33:37 
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 6.1 (Build 7601: Service Pack 1)
*/


我找了个2005测试了一下,没有发现问题。

你的错误提示第四行的.字符附近有错误,你看看是不是和你贴出来的不一样。

#8


删除表和删除函数之前加个是否存在的判断试试

if object_id('a','u') is not null
drop table a
if object_id('F_Test_One') is not null
drop function F_Test_One

#9


楼主,是直接在SQL SERVER的查询分析中执行的吗?还是在程序中调用的?SQL没有问题,楼主还是仔细调试一下。

#10


经过测试,SQL没有问题哦

#11


--删除测试表A
DROP TABLE a
--删除函数 F_Test_One
DROP FUNCTION F_Test_One
 
--创建A表
create table a
(
   id int identity(1,1) primary key,
   [name] varchar(20)
)
 
INSERT INTO A([name])
SELECT 'a'
union all
select 'b'
 
GO
--创建函数
create function [dbo].[F_Test_One](@name varchar(50))
returns @TempTableOne table ([name] VARCHAR(50))
as
begin
    IF @name='a'
    BEGIN
        insert into @TempTableOne SELECT @name
    END
    ELSE
        insert into @TempTableOne SELECT @name+'test!'
         
    RETURN;
END
GO
SELECT 
(
  SELECT COUNT(1) FROM [dbo].[F_Test_One]([name])
) AS ccount
FROM a

#12



--服务器版本
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 
--本地版本
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

引用 2 楼 ap0405140 的回复:
LZ代码在SQL2008 R2环境测试正常.

LZ的本地SQL跟服务器上的SQL版本不一样的吧?



--服务器版本
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 
--本地版本
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

#13


问题已找到是兼容级别问题,服务器设置错误,兼容级别设置为80了,应该更改为兼容级别兼容90!谢谢大家!

#1


本地SQL 没有错误,但是把存储过程放在服务器上执行时报错如:【Incorrect syntax near '.'】!

#2


LZ代码在SQL2008 R2环境测试正常.

LZ的本地SQL跟服务器上的SQL版本不一样的吧?

#3


a.[name] 把中括号去掉试试。

#4


引用 2 楼 ap0405140 的回复:
LZ代码在SQL2008 R2环境测试正常.

LZ的本地SQL跟服务器上的SQL版本不一样的吧?

我本地是SQL 2005的。服务器应该也是2005!

#5


【a.[name] 把中括号去掉试试。 】去掉了还是报同样的错误啊?纠结!

#6


引用 3 楼 maco_wang 的回复:
a.[name] 把中括号去掉试试。

去掉了还是报同样的错误啊?纠结! 

#7



SELECT @@VERSION
/*
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
Oct 14 2005 00:33:37 
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 6.1 (Build 7601: Service Pack 1)
*/


我找了个2005测试了一下,没有发现问题。

你的错误提示第四行的.字符附近有错误,你看看是不是和你贴出来的不一样。

#8


删除表和删除函数之前加个是否存在的判断试试

if object_id('a','u') is not null
drop table a
if object_id('F_Test_One') is not null
drop function F_Test_One

#9


楼主,是直接在SQL SERVER的查询分析中执行的吗?还是在程序中调用的?SQL没有问题,楼主还是仔细调试一下。

#10


经过测试,SQL没有问题哦

#11


--删除测试表A
DROP TABLE a
--删除函数 F_Test_One
DROP FUNCTION F_Test_One
 
--创建A表
create table a
(
   id int identity(1,1) primary key,
   [name] varchar(20)
)
 
INSERT INTO A([name])
SELECT 'a'
union all
select 'b'
 
GO
--创建函数
create function [dbo].[F_Test_One](@name varchar(50))
returns @TempTableOne table ([name] VARCHAR(50))
as
begin
    IF @name='a'
    BEGIN
        insert into @TempTableOne SELECT @name
    END
    ELSE
        insert into @TempTableOne SELECT @name+'test!'
         
    RETURN;
END
GO
SELECT 
(
  SELECT COUNT(1) FROM [dbo].[F_Test_One]([name])
) AS ccount
FROM a

#12



--服务器版本
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 
--本地版本
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

引用 2 楼 ap0405140 的回复:
LZ代码在SQL2008 R2环境测试正常.

LZ的本地SQL跟服务器上的SQL版本不一样的吧?



--服务器版本
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 
--本地版本
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

#13


问题已找到是兼容级别问题,服务器设置错误,兼容级别设置为80了,应该更改为兼容级别兼容90!谢谢大家!