2012-08-13 57 views
0

我想从我的复选框列表中选择的值,但我一直在sql中遇到错误。未封闭的报价

错误

Msg 105, Level 15, State 1, Line 22 
Unclosed quotation mark after the character string ')'. 
Msg 102, Level 15, State 1, Line 22 
Incorrect syntax near ')'. 

SP

@DEPTCODE INT, 
@COA VARCHAR(50), 
@MAP VARCHAR(10) 
AS 
BEGIN 
SET NOCOUNT ON; 
DECLARE @SQL VARCHAR(MAX); 

BEGIN 
SET @SQL = N'SELECT 
       A.GL_EXCEPT_ID AS ''GL ID'' 
      , A.COA_SYSTEM AS ''Account Type'' 
      , A.ENTN AS ''Entity'' 
      , A.MED_CTR AS ''Medical Center'' 
      , (''['' + A.LOCN + ''] '' + B.LOCN_DESC) AS ''Location Code'' 
      , (''['' + A.CTRN + ''] '' + C.CTRN_DESC) AS ''Cost Center'' 
      , (''['' + RTRIM(A.FUND) + ''] '' + A.FUND_DESC) AS ''Fund'' 
      , A.ROLLUP_TYPE_ID AS ''Rollup ID'' 
      , A.ROLLUP_TYPE_DESC AS ''Rollup Type'' 
      , A.MAPPING AS ''Mapping'' 
FROM V_ROLLUP_GL_DESC_REV1 A 
    LEFT JOIN T_ROLLUP_GL_LOCN B 
     ON A.LOCN = B.LOCN 
      AND A.MED_CTR_ID = B.MED_CTR_ID 
      AND A.COA_SYSTEM = B.COA_SYSTEM 
    LEFT JOIN T_ROLLUP_GL_CTRN C 
     ON A.CTRN = C.CTRN 
      AND A.COA_SYSTEM = C.COA_SYSTEM 
WHERE (A.DEPT_ID = '+CONVERT(VARCHAR,@DEPTCODE)+') 
     AND A.COA_SYSTEM IN ('[email protected]+') 
     AND A.MAPPING IN ('[email protected]+''')' 
PRINT(@SQL) 
EXEC(@SQL) 
END 
END 

查询

USE [Rollup2] 
GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[USP_GET_GL_BY_DEPT] 
    @DEPTCODE = 1000, 
    @COA = N'''COA'',''COA_SYSTEM''', 
    @MAP = N'''DEFAULT'',''EXCEPTION''' 

SELECT 'Return Value' = @return_value 

回答

2

你的问题的部分原因是:

@MAP VARCHAR(10) 

但你传递一个值更长:

@MAP = N'''DEFAULT'',''EXCEPTION''' 

增加长度:

@MAP VARCHAR(50) 

第二个问题是这一行,有太多的单引号:

AND A.MAPPING IN ('[email protected]+''')' 

将其更改为:

AND A.MAPPING IN ('[email protected]+')' 
+0

谢谢秒。我看到问题是VARCHAR长度。最初有单引号,并且由于错误而改变了它。 – user1512593 2012-08-13 23:35:38