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)+'''