【发布时间】:2021-04-28 13:51:16
【问题描述】:
如果我在 SQL Server 中有一个动态查询,其中包含列名变量first_name、last_name、ref_ID、order_ID、post_code_ID 我如何替换所有后缀为@987654328 的值@ 具有相同的字符串,例如 look_up_value。
期望的输出是
first_name, last_name, look_up_value, look_up_value, look_up_value
目前有SELECT REPLACE(@Var, '_ID', 'look_up_value'),但这显然会留下列的前缀。
谢谢
DECLARE @SQL NVARCHAR(MAX)
DECLARE @Fields NVARCHAR(MAX)
DECLARE @Fields2 NVARCHAR(MAX)
DECLARE @Return NVARCHAR(MAX) = Char(13)
SET @Fields = ''
SELECT @Fields = @Fields + Column_name + ',' + @Return
FROM Orders.INFORMATION_SCHEMA.columns
WHERE TABLE_NAME = 'Recent_Orders'
SELECT @Fields = LEFT(@Fields, (LEN(@Fields) - 2))
SELECT REPLACE(@Fields, '_ID', 'look_up_value')
【问题讨论】:
-
向我们展示完整的代码是什么,而不是不完整的sn-p。
-
你从哪里得到这些列名?来自
sys.columns的动态SQL生成? -
INFORMATION_SCHEMA.columns
-
请注意,您需要搜索
'_ID,',而不是'_ID',才能仅查找后缀。 ('THE_IDES_OF_MARCH'不应该匹配。)在select中使用case表达式来组合列表以即时替换各个名称而不是组合字符串然后尝试修复会更容易它。推荐阅读:String_Agg. -
仅供参考:
String_Agg已添加到 SQL Server 2017 中。迁移到受支持版本的另一个理由。
标签: sql-server tsql sql-server-2008