如何配置代码片段:仅在DB_ID有输入时添加sys.all_objects前的点号?
代码片段条件式点号添加实现方案
原始代码片段
SELECT 'SELECT * FROM ' + OBJECT_SCHEMA_NAME(o.object_id, DB_ID(${20:})) + '.' + name, * FROM ${20/$/./}sys.all_objects o WHERE name LIKE '%${10:hadr}%' ORDER BY o.name;
当前问题
目前当你在DB_ID()函数的${20}位置输入数据库名时,sys.all_objects前会自动显示输入的名称并附加点号;但如果${20}为空,sys.all_objects前仍会保留一个多余的点号,不符合需求。
解决方案
修改FROM行的变量替换逻辑,使用VSCode代码片段的条件插入语法,只有当${20}有内容时才添加数据库名和点号:
SELECT 'SELECT * FROM ' + OBJECT_SCHEMA_NAME(o.object_id, DB_ID(${20:})) + '.' + name, * FROM ${20:+$20.}sys.all_objects o WHERE name LIKE '%${10:hadr}%' ORDER BY o.name;
语法说明
${20:+$20.} 是VSCode代码片段的条件语法:
${variable:+content}表示:当variable(这里是${20})被填入内容时,才会插入content部分- 这里的
content是$20.,即输入的数据库名加上点号;如果${20}为空,该部分会被忽略,直接显示sys.all_objects
内容的提问来源于stack exchange,提问作者Fajela Tajkiya
相关产品推荐
相关产品推荐

