错误:未关闭的引号后

Roh*_*ade 0 sql-server t-sql

WHILE (@7DaysEarlierPartitionIntegerId <= @CurrentPartitionIntegerId)
    BEGIN
        Set @7DaysEarlierPartitionId 
            = CAST(@7DaysEarlierPartitionIntegerId AS char)
        set @sqlCommand 
            = 'Select * from ' 
              + quotename(@RequestUsage_Partition + @7DaysEarlierPartitionId)
              + 'where UserLogin like''r2\rohit.kharade'
        exec(@sqlCommand)
        set @7DaysEarlierPartitionIntegerId 
            = @7DaysEarlierPartitionIntegerId + 1
    END
Run Code Online (Sandbox Code Playgroud)

我收到错误:

字符串 'r2\rohit.kh' 后的非封闭引号。

如何执行 exec 命令 UserLogin =%r2\rohit.kharade%

Nic*_*Nic 7

你错过了结束语,这应该能让你到达那里。

WHILE (@7DaysEarlierPartitionIntegerId <= @CurrentPartitionIntegerId)
    BEGIN
        Set @7DaysEarlierPartitionId 
            = CAST(@7DaysEarlierPartitionIntegerId AS char)
        set @sqlCommand 
            = 'Select * from ' 
              + quotename(@RequestUsage_Partition + @7DaysEarlierPartitionId)
              + 'where UserLogin like ''r2\rohit.kharade'''
        exec(@sqlCommand)
        set @7DaysEarlierPartitionIntegerId 
            = @7DaysEarlierPartitionIntegerId + 1
    END
Run Code Online (Sandbox Code Playgroud)

我一般喜欢用 CHAR(39) 代替多引号,只是为了让代码更具可读性

WHILE (@7DaysEarlierPartitionIntegerId <= @CurrentPartitionIntegerId)
    BEGIN
        Set @7DaysEarlierPartitionId 
            = CAST(@7DaysEarlierPartitionIntegerId AS char)
        set @sqlCommand 
            = 'Select * from ' 
              + quotename(@RequestUsage_Partition + @7DaysEarlierPartitionId)
              + 'where UserLogin like ' + CHAR(39) + 'r2\rohit.kharade' + CHAR(39)
        exec(@sqlCommand)
        set @7DaysEarlierPartitionIntegerId 
            = @7DaysEarlierPartitionIntegerId + 1
    END
Run Code Online (Sandbox Code Playgroud)

额外的想法,就像另一个更易读的版本一样,你也可以 QUOTENAME

WHILE (@7DaysEarlierPartitionIntegerId <= @CurrentPartitionIntegerId)
    BEGIN
        Set @7DaysEarlierPartitionId 
            = CAST(@7DaysEarlierPartitionIntegerId AS char)
        set @sqlCommand 
            = 'Select * from ' 
              + quotename(@RequestUsage_Partition + @7DaysEarlierPartitionId)
              + ' where UserLogin like ' + QUOTENAME('r2\rohit.kharade', CHAR(39))
        exec(@sqlCommand)
        set @7DaysEarlierPartitionIntegerId 
            = @7DaysEarlierPartitionIntegerId + 1
    END
Run Code Online (Sandbox Code Playgroud)


Aar*_*and 5

作为替代方案,您可以参数化参数,以便您根本不必处理引号。

DECLARE @likeArg varchar(255) = 'r2\rohit.kharade';

WHILE (@7DaysEarlierPartitionIntegerId <= @CurrentPartitionIntegerId)
BEGIN
    Set @7DaysEarlierPartitionId 
        = CAST(@7DaysEarlierPartitionIntegerId AS varchar(11)) --*
    set @sqlCommand = N'Select <output columns> from ' 
          + quotename(@RequestUsage_Partition + @7DaysEarlierPartitionId)
          + N' where UserLogin like @likeArg ORDER BY <sort columns>;'
    exec sys.sp_executesql @sqlCommand, N'@likeArg varchar(255)', @likeArg; 
    set @7DaysEarlierPartitionIntegerId += 1;
END
Run Code Online (Sandbox Code Playgroud)

* 另外,不要在没有 length 的情况下使用char/varchar