SQL Server存储过程-参数

SQL Server存储过程-参数,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个返回网格结果的存储过程。我在将@idCC参数传输到SQL查询时遇到了一些基本问题,如图所示。我知道,如果我删除参数和数字值中的硬代码,SQL就会工作。如何允许查询读取显示的查询的@idCC SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_CC_ContactGroupList] (@idCC int) AS BE

我有一个返回网格结果的存储过程。我在将
@idCC
参数传输到SQL查询时遇到了一些基本问题,如图所示。我知道,如果我删除参数和数字值中的硬代码,SQL就会工作。如何允许查询读取显示的查询的
@idCC

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    ALTER PROCEDURE [dbo].[sp_CC_ContactGroupList] 
        (@idCC int)
    AS
    BEGIN
        DECLARE @ListOfGroups VARCHAR(MAX) =
                (STUFF((SELECT DISTINCT ',' + QUOTENAME(GroupName) 
                        FROM dbo.CC_Groups
                        WHERE IsContactGroup = '1'
                        FOR XML PATH('')), 1, 1, ''));

        DECLARE @sql VARCHAR(MAX) = ('SELECT * 
                                      FROM
                                          (SELECT       
                                               dbo.CC_Contacts.idCC, 
                                               dbo.CC_Groups.GroupName AS gName, 
                                               ''X'' AS IsInGroup
                                           FROM          
                                               dbo.CC_ContactGroups 
                                           INNER JOIN
                                               dbo.CC_Groups ON dbo.CC_ContactGroups.idGroup = dbo.CC_Groups.idGroup 
                                           INNER JOIN
                                               dbo.CC_Contacts ON dbo.CC_ContactGroups.idCC = dbo.CC_Contacts.idCC
                                           WHERE 
                                               dbo.CC_Contacts.idCC = '''+@idCC+''') AS x
                                           PIVOT (MAX(IsInGroup) 
                                               FOR gName IN(' +  @ListOfGroups + ')) as p');

     EXEC(@sql);
END

在存储过程
[dbo].[sp\u CC\u ContactGroupList]
中,替换

dbo.CC_Contacts.idCC = '''+@idCC+'''


现在,它将向您显示
@idCC

如果您打印它,查询字符串将如何显示?将WHERE dbo.CC_Contacts.idCC=''+@idCC+''替换为WHERE dbo.CC_Contacts.idCC=+@idCC该行看起来像:| idCC | GroupName1 GroupName2 | GroupName3 |替换为| 25 | Null | X | Null | X | Null | X | X |是否解决了错误?不,SQL命令用引号括起来,您必须转义引号才能读取参数。我认为,它工作得很好。谢谢您。
dbo.CC_Contacts.idCC = '''+cast(@idCC as varchar)+'''