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%
你错过了结束语,这应该能让你到达那里。
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)
作为替代方案,您可以参数化参数,以便您根本不必处理引号。
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等。