0

我創建了以下存儲過程:SQL程序給出錯誤「‘TBL’是無法識別的內置函數南」

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 = '[email protected]+' 
       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查詢則是工作的罰款

它只能通過程序給出錯誤。

+0

你應該表現出你是如何調用procdure,貌似失蹤的報價爲您的參數。 – bummi 2014-12-19 08:15:39

回答

2

爲什麼你寫一個存儲過程只是爲了執行一個(錯誤的,因爲你錯過了WHERE子句中的單引號)連接的SQL字符串?試試這個:當人,而不是用正確的SQL嘗試使用級聯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 

這樣的問題幾乎總是發生。這幾乎總是會導致問題。

+0

好吧,但我不能將此答案存儲到@strSql varchar(max)變量中嗎? – deepak 2014-12-19 08:18:19

+0

明白了這一點..非常感謝您的解釋 – deepak 2014-12-19 08:29:26

+0

您不能輕易地將結果存儲在變量中。它返回一個表格。如果這就是你的意思......? – 2014-12-19 08:45:26

1

在追加參數之前,您好像錯過了引號。試着像

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 = '''[email protected]+''' 
      group by USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.DEPTNAME 
      ' 

雖然我@Thorsten同意,除非它的絕對必要,不要使用查詢SQL級聯。

+0

謝謝。是工作。 – deepak 2014-12-19 08:29:08

1

其用引號問題的@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 = '''[email protected]+''' 
       group by USERINFO.BADGENUMBER, USERINFO.NAME,DEPARTMENTS.DEPTNAME' 
相關問題