10 sql t-sql string interpolation
T-SQL是否支持插值字符串?
我们举个例子:
SET @query = 'SELECT ' + @somevariable + ' FROM SOME_TABLE'
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
SET @query = 'SELECT {@somevariable} FROM SOME_TABLE'
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答!
小智 13
感谢@jfsebastian 指出这些解决方案。遗憾的是 xp_sprintf 被限制为 254 个字符,因此在使用长查询时这并不理想。FORMATMESSAGE 被限制为 2047 个字符,所以这足以运行长查询。
我将在一篇文章中总结解决方案的所有内容,以使事情井井有条。
使用FORMATMESSAGE重要的是要知道,使用内插字符串作为第一个参数,它仅支持 SQL 版本 2012 及更高版本,因此我将使用 FORMATMESSAGE 发布 2 个答案:
SQL 版本 >= 2012:
SET @query = FORMATMESSAGE('SELECT %s FROM SOME_TABLE', @somevariable);
Run Code Online (Sandbox Code Playgroud)
SQL 版本 < 2012:
EXEC sp_addmessage 50001, 16, 'SELECT %s FROM SOME_TABLE', NULL, NULL, 'replace'
SET @query = FORMATMESSAGE(50001, @somevariable)
Run Code Online (Sandbox Code Playgroud)
使用xp_sprintf存储过程很重要,要注意它限制为 254 个字符,因此对于长查询来说不是一个好主意。
DECLARE @query AS VARCHAR(100)
,@somevariable as VARCHAR(10) = '[id]'
EXEC xp_sprintf @query OUTPUT, 'SELECT %s FROM SOME_TABLE', @somevariable
Run Code Online (Sandbox Code Playgroud)
当你的字符串很长时,为了提高可读性,我喜欢这样做:
SET @query = replace( replace( replace(
'SELECT {@variable1} FROM {@variable2} WHERE {@variable3}'
, '{@variable1}', @variable1 )
, '{@variable2}', @variable2 )
, '{@variable3}', @variable3 )
Run Code Online (Sandbox Code Playgroud)
它的优点是 SQL 字符串的可读性,而且您可以多次使用同一个变量。显然这不是正确的插值,但我比这个FORMATMESSAGE()选项更喜欢它,因为
这不是在T-SQL中做事的常用方法,但可以使用xp_sprintf
DECLARE @query AS VARCHAR(100)
,@somevariable as VARCHAR(10) = '[id]'
EXEC xp_sprintf @query OUTPUT, 'SELECT %s FROM SOME_TABLE', @somevariable
PRINT @query
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17124 次 |
| 最近记录: |