SQL 查询字段中的字符串文字

String literal in SQL query field

我想在字符串文字查询中执行填充命令,但它给出了一些错误

没有字符串文字工作的查询:

 SELECT apGr.*, 'Name: ' + apGr.GroupDesc + ' | Group: ' + apGr.GroupName GroupFull , 
 abc = STUFF
(
    (
        SELECT ',' + appGrMn.Email
        FROM APP_GroupManager As appGrMn
        -- You only want to combine rows for a single ID here:
        WHERE appGrMn.GroupId = apGr.GroupId
        FOR XML PATH (''), TYPE
    ).value('.', 'varchar(max)')
, 1, 1, '')
FROM App_Group apGr 
WHERE apGr.GroupId = 239 

作为字符串文字的查询失败:

    DECLARE @WhereQuery NVARCHAR(200) = ''
    DECLARE @Query NVARCHAR(500)

    SET @GroupId = 5

    -- Insert statements for procedure here
    IF(@GroupId IS NOT NULL)
      BEGIN
           PRINT(@GroupId)
           SET @WhereQuery = 'WHERE apGr.GroupId = ' + @GroupId 
      END
    ELSE IF (@SystemId IS NOT NULL)
      BEGIN
           SET @WhereQuery = 'WHERE apGr.SystemId = ' + @SystemId
      END
    ELSE IF (@GroupName IS NOT NULL)
      BEGIN
           SET @WhereQuery = 'WHERE apGr.GroupName = ''' + @GroupName + ''''
      END

   SET @Query = 'SELECT ''Name: '' + apGr.GroupDesc + '' | Group: '' + apGr.GroupName GroupFull  , 
 abc = STUFF
(
    (
        SELECT '','' + appGrMn.AdministratorMail
        FROM APP_GroupManager As appGrMn
        -- You only want to combine rows for a single ID here:
        WHERE appGrMn.GroupId = apGr.GroupId
        FOR XML PATH (''), TYPE
    ).value(''.'', varchar(max))
, 1, 1, '') ' + 
                'FROM App_Group apGr '  + 
                'JOIN T_SensitiveLevel AS tSen ON tSen.SensitiveLevelId = apGr.SensitiveLevelId '  + @WhereQuery
                PRINT @Query
   EXEC(@Query)
END

打印的查询看起来:

5
SELECT 'Name: ' + apGr.GroupDesc + ' | Group: ' + apGr.GroupName GroupFull  , 
 abc = STUFF
(
    (
        SELECT ',' + appGrMn.AdministratorMail
        FROM APP_GroupManager As appGrMn
        -- You only want to combine rows for a single ID here:
        WHERE appGrMn.GroupId = apGr.GroupId
        FOR XML PATH ('), TYPE
    ).value('.', varchar(max))
, 1, 1, ') FROM App_Group apGr JOIN T_SensitiveLevel AS tSen ON tSen.SensitiveLevelId = apGr.SensitiveLevelId WHERE apGr.GroupId = 2

它没有按应有的方式附加 @WhereQuery,错误是:

Msg 102, Level 15, State 1, Line 20 Incorrect syntax near '.'.

如有任何帮助,我们将不胜感激。

存在一些与“”相关的语法错误。在输出中期望 ('') 时,您需要使用 '''' 而不是 ''。 Where 子句被截断,因为 @query 变得比它的长度 (500) 大。我对查询进行了一些更改,请检查:

DECLARE @WhereQuery NVARCHAR(200) = ''
    DECLARE @Query NVARCHAR(2000)
    declare @GroupId NVARCHAR(500)
    declare @SystemId NVARCHAR(500)
    declare @GroupName NVARCHAR(500)
    
    set @GroupName='a'

    SET @GroupId = 5

    -- Insert statements for procedure here
    IF(@GroupId IS NOT NULL)
      BEGIN
           PRINT(@GroupId)
           SET @WhereQuery = 'WHERE apGr.GroupId = ' + @GroupId 
      END
    ELSE IF (@SystemId IS NOT NULL)
      BEGIN
           SET @WhereQuery = 'WHERE apGr.SystemId = ' + @SystemId
      END
    ELSE IF (@GroupName IS NOT NULL)
      BEGIN
           SET @WhereQuery = 'WHERE apGr.GroupName = ''' + @GroupName + ''''
      END
    
   SET @Query = 'SELECT ''Name: '' + apGr.GroupDesc + '' | Group: '' + apGr.GroupName GroupFull  , 
 abc = STUFF
(
    (
        SELECT '','' + appGrMn.AdministratorMail
        FROM APP_GroupManager As appGrMn
        -- You only want to combine rows for a single ID here:
        WHERE appGrMn.GroupId = apGr.GroupId
        FOR XML PATH (''''), TYPE
    ).value(''.'', ''varchar(max)'')
, 1, 1, '''') ' + 
                'FROM App_Group apGr '  + 
                'JOIN T_SensitiveLevel AS tSen ON tSen.SensitiveLevelId = apGr.SensitiveLevelId '  + @WhereQuery +''
                PRINT @Query
                
   EXEC(@Query)