【发布时间】:2016-10-05 18:33:20
【问题描述】:
我正在尝试在 SQL Server 查询中替换多个字符,并希望通过 #temp 表而不是嵌套的 REPLACE 来实现这一点。我得到了下面的 SQL 代码,想要达到类似的结果
ABC
DEF
GHI
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
IF OBJECT_ID('tempdb..#temp2') IS NOT NULL DROP TABLE #temp2
CREATE TABLE #temp
(
STRING_TO_REPLACE NVARCHAR(5)
)
INSERT INTO #temp (STRING_TO_REPLACE)
VALUES (' ')
,('/')
,('_')
CREATE TABLE #temp2
(
STRING_NAME NVARCHAR(5)
)
INSERT INTO #temp2 (STRING_NAME)
VALUES ('A BC')
,('D/EF')
,('G_HI')
SELECT REPLACE(t2.STRING_NAME,(SELECT t1.STRING_TO_REPLACE
FROM #temp t1),'')
FROM #temp2 t2
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
IF OBJECT_ID('tempdb..#temp2') IS NOT NULL DROP TABLE #temp2
我可以通过嵌套替换实现结果
SELECT REPLACE(REPLACE(REPLACE(t2.STRING_NAME,'_',''),'/',''),' ','') FROM #temp2 t2
但真的很想通过#temp 表执行此操作。请有人可以帮助我。
当我尝试运行我的第一个代码时,我收到以下错误
消息 512,级别 16,状态 1,第 23 行子查询返回超过 1 个 价值。当子查询跟随 =、!=、 时,这是不允许的
、>= 或当子查询用作表达式时。
【问题讨论】:
-
您是尝试动态生成嵌套选择,还是尝试生成 3 个(在这种情况下)选择语句以连续运行。 (或其他)
-
标签: sql sql-server tsql