Sql server sql过程给出错误“';TBL&x27;不是公认的内置函数“nam”;
我创建了以下存储过程:Sql server sql过程给出错误“';TBL&x27;不是公认的内置函数“nam”;,sql-server,sql-server-2008,stored-procedures,sql-server-2008-r2,Sql Server,Sql Server 2008,Stored Procedures,Sql Server 2008 R2,我创建了以下存储过程: USE [Att] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create PROCEDURE [dbo].[test] @DEPTNAME varchar(MAX) = '*' AS DECLARE @strSql varchar(max) Set @strSql = 'SELECT DISTINCT USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.D
USE [Att]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create PROCEDURE [dbo].[test]
@DEPTNAME varchar(MAX) = '*'
AS
DECLARE @strSql varchar(max)
Set @strSql = 'SELECT DISTINCT USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.DEPTNAME
FROM USERINFO INNER JOIN CHECKINOUT ON USERINFO.USERID = CHECKINOUT.USERID
LEFT JOIN DEPARTMENTS ON DEPARTMENTS.DEPTID = USERINFO.DEFAULTDEPTID
WHERE DEPARTMENTS.DEPTNAME = '+@DEPTNAME+'
group by USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.DEPTNAME
'
EXEC (@strSql)
它是成功创建的,但当我执行此过程时,它会出现如下错误
Msg 195, Level 15, State 10, Line 3
'TBL' is not a recognized built-in function name.
但是,当我将此过程作为SQL查询执行时,它就可以正常工作了
它只通过过程给出错误。为什么编写存储过程只是为了执行(错误地,因为在
WHERE
子句中缺少单引号)连接的SQL字符串?试试这个:
USE [Att]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[test]
@DEPTNAME varchar(MAX) = '*'
AS BEGIN
SELECT DISTINCT
USERINFO.BADGENUMBER,
USERINFO.NAME,
DEPARTMENTS.DEPTNAME
FROM USERINFO
INNER JOIN CHECKINOUT ON USERINFO.USERID = CHECKINOUT.USERID
LEFT JOIN DEPARTMENTS ON DEPARTMENTS.DEPTID = USERINFO.DEFAULTDEPTID
WHERE DEPARTMENTS.DEPTNAME = @DEPTNAME
GROUP BY
USERINFO.BADGENUMBER, USERINFO.NAME, DEPARTMENTS.DEPTNAME
END
这样的问题几乎总是发生在人们尝试使用连接SQL而不是使用正确的SQL时。这几乎总是会导致问题。在添加参数之前,您似乎遗漏了引号。试一试
Set @strSql = 'SELECT DISTINCT USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.DEPTNAME
FROM USERINFO INNER JOIN CHECKINOUT ON USERINFO.USERID = CHECKINOUT.USERID
LEFT JOIN DEPARTMENTS ON DEPARTMENTS.DEPTID = USERINFO.DEFAULTDEPTID
WHERE DEPARTMENTS.DEPTNAME = '''+@DEPTNAME+'''
group by USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.DEPTNAME
'
尽管我同意@Thorsten的观点,除非绝对必要,否则不要使用连接sql进行查询。这是
@DEPTNAME
试试这个
Set @strSql = 'SELECT DISTINCT USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.DEPTNAME
FROM USERINFO INNER JOIN CHECKINOUT ON USERINFO.USERID = CHECKINOUT.USERID
LEFT JOIN DEPARTMENTS ON DEPARTMENTS.DEPTID = USERINFO.DEFAULTDEPTID
WHERE DEPARTMENTS.DEPTNAME = '''+@DEPTNAME+'''
group by USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.DEPTNAME'
您应该显示如何调用过程,看起来您的参数缺少引号。好的,但我不能将此答案存储到@strSql varchar(max)变量中吗?您不能轻松地将结果存储到变量中。它返回一个表。如果这就是你的意思…?@deepak虽然这个答案不使用连接的SQL,但没有必要将查询存储在变量中