首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server -在select *查询中替换()

问SQL Server -在select *查询中替换()
EN

Stack Overflow用户
提问于 2014-03-06 20:50:54
回答 3查看 2K关注 0票数 1

我有一个执行"select * from视图“的过程,该输出在其中一列中包含一个倒逗号。我想做一个替换(),以删除额外的倒逗号,但我不能更改"select *“,因为这是一个在不同场景中使用的动态查询。

很明显,以下查询不起作用

代码语言:javascript
复制
select replace(*, '"', '') from ReportRegistry 

有些人对此很感激。

我想知道是否有任何方法,我可以删除引号,而不知道列名。我要把它们从所有列中移除。在不同的情况下,列名是不同的。

在不同的情况下,在过程中不同地定义视图。动态colum名称被添加为文本,并使用sp_executesql执行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-06 21:23:59

代码语言:javascript
复制
DECLARE @ColNames NVARCHAR(MAX) = ''

--Dynamically build a list of column names for the view, separated by commas.
SELECT @ColNames = @ColNames + 
    CASE
        --Use the REPLACE function for "String" type data types.  Did I leave any data types out?
        --Change "x" to the character(s) you want to replace.
        WHEN c.DATA_TYPE IN ('VARCHAR', 'CHAR', 'NVARCHAR', 'NCHAR') THEN 'REPLACE([' + c.COLUMN_NAME + '], ''x'', '''') AS [' + c.COLUMN_NAME + '],'
        --All other data types.
        ELSE '[' + c.COLUMN_NAME + '],'
    END
--In addition to user tables, views are included in INFORMATION_SCHEMA.COLUMNS (and in INFORMATION_SCHEMA.TABLES).
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'ReportRegistry'
--Retain original order of the view's columns.
ORDER BY c.ORDINAL_POSITION

--Remove last comma
SET @ColNames = LEFT(@ColNames, LEN(@ColNames) - 1)

EXEC ('SELECT ' + @ColNames + ' FROM ReportRegistry ')
票数 1
EN

Stack Overflow用户

发布于 2014-03-06 20:54:08

代码语言:javascript
复制
select replace(TargetColumnName, '"', '')
       ,Column2
       ,Column3
       ,..... and so on..... 
from ReportRegistry 
票数 0
EN

Stack Overflow用户

发布于 2014-03-06 21:40:53

代码语言:javascript
复制
declare @tbl varchar(max) = 'table_or_view_name'

declare @cols varchar(max) =
    (select case when data_type='varchar' then 'REPLACE('+column_name+',''"'','''')' else column_name end+char(10)+','
    from information_schema.columns
    where table_name = @tbl for xml path(''))

declare @sql varchar(max)='select '+left(@cols,len(@cols)-1)+' from '+@tbl

print @sql
exec(@sql)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22235677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档