有没有办法替换sql中的(*)?
所以我只是在做一些类似的事情:有没有办法替换sql中的(*)?,sql,sql-server,replace,Sql,Sql Server,Replace,所以我只是在做一些类似的事情: select [BadData], [WorseDate], [IQuitData] into #BadDataTempTable from SomeoneElsesMess Select Replace(#BadDataTempTable.*, ',', ' ') from #BadDataTempTable -- Replace all commas in every column `with a space
select
[BadData], [WorseDate], [IQuitData]
into
#BadDataTempTable
from
SomeoneElsesMess
Select
Replace(#BadDataTempTable.*, ',', ' ')
from
#BadDataTempTable -- Replace all commas in every column `with a space--`
我现在想做的是类似于:
select
[BadData], [WorseDate], [IQuitData]
into
#BadDataTempTable
from
SomeoneElsesMess
Select
Replace(#BadDataTempTable.*, ',', ' ')
from
#BadDataTempTable -- Replace all commas in every column `with a space--`
这可能吗?如果是,请告诉我最简单(非功能)的方法
谢谢。我想是SQLServer2012。我使用的是SSMS 17否,必须指定列。您可以使用动态SQL来构建更新/查询。然后从结果中复制所需的命令 也许这将帮助您开始:
BEGIN
-- Set the replace value
DECLARE @ls_replaceValue NVARCHAR(MAX) = ',';
-- Set the with value
DECLARE @ls_withValue NVARCHAR(MAX) = ' ';
-- Set the table name we want to query
DECLARE @ls_table NVARCHAR(MAX) = 'some_table';
-- Get all of the columns and provide the replace parameters
DECLARE @ls_columns NVARCHAR(MAX) = '';
SELECT @ls_columns = @ls_columns + ', ' + name + ' = REPLACE(' + name + ', ' + '' + '''' + REPLACE(@ls_replaceValue, '''', '''''''') + '''' + ', ' + '''' + REPLACE(@ls_withValue, '''', '''''''') + '''' + ')'
FROM sys.all_columns
WHERE object_id = OBJECT_ID(@ls_table)
AND collation_name IS NOT NULL; -- Skip columns that aren't character based
-- Remove the first ', ' from the column list
SET @ls_columns = SUBSTRING(@ls_columns, 3, LEN(@ls_columns));
IF @ls_columns = ''
BEGIN
PRINT 'Table not found'
RETURN
END
-- Build a query
DECLARE @ls_query_sql NVARCHAR(MAX) = '';
SET @ls_query_sql = 'SELECT ' + @ls_columns + ' FROM ' + @ls_table;
-- Show the results
SELECT @ls_query_sql AS querySQL;
END
就在OP询问您如何在动态SQL中实现这一点之后,下面是我的方法。基本上,获取表模式信息并连接所有列,以及使用
forxml
所需的REPLACE
逻辑。这基本上构造了Rigerta posted语句,但它是动态执行的
use tempdb
go
if object_id('tempdb.dbo.#SomeoneElsesBadData') is not null drop table #SomeoneElsesBadData
create table #SomeoneElsesBadData
(
BadData varchar(250),
WorseData varchar(250),
IQuitData varchar(250)
)
declare @sql nvarchar(max)
select @sql = 'select '
+ stuff((select ', '
+ name
+ ' = replace(' + name + ''','', '''')'
from tempdb.sys.columns
where object_id = object_id('tempdb.dbo.#SomeoneElsesBadData')
for xml path('')), 1, 1, '')
+ ' into #BadDataTempTable
from #SomeoneElsesBadData'
exec sp_executesql @sql
在所有条件相同的情况下,数据可能应该在进入SQL之前清理,但现实很少公平。不,这是不可能的。您必须为每一列执行
REPLACE
。您可以手动(用REPLACE写出所有列名)或动态(如果列太多,您可以使用此选项并从例如information\u schema.columns中检索列名)。也就是说,如果数据有那么糟糕,我不确定这样的替换会起什么作用……我不太确定你说的动态是什么意思。你能给我看一下吗?这对我来说有点太高级了,有什么医生可以让我看一下吗?我也不想更新表格。只有输出需要替换、。为了更好的上下文,我们将从sql中获取数据并“导出”为.csv,然后将该.csv导入SalesForce。您需要调整第7行(将“some_table”更改为您的表名)。此SQL块将获取给定表的所有列,并输出您可以执行的查询。