未公开的报价

时间:2012-08-13 23:16:16

标签: sql-server-2005 stored-procedures

我正在尝试从我的复选框列表中提取所选值,但我在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 ('+@COA+')
        AND A.MAPPING IN ('+@MAP+''')'
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

1 个答案:

答案 0 :(得分:2)

您的部分问题是:

@MAP VARCHAR(10)

但是你传递的值要长得多:

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

将你的长度增加到:

@MAP VARCHAR(50)

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

AND A.MAPPING IN ('+@MAP+''')'

将其更改为:

AND A.MAPPING IN ('+@MAP+')'