Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sql过程给出错误“';TBL&x27;不是公认的内置函数“nam”;_Sql Server_Sql Server 2008_Stored Procedures_Sql Server 2008 R2 - Fatal编程技术网

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,但没有必要将查询存储在变量中