Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用REPLACE语句更改结果集中所有字段中的数据_Sql_Database_Replace_Syntax_Data Manipulation - Fatal编程技术网

Sql 使用REPLACE语句更改结果集中所有字段中的数据

Sql 使用REPLACE语句更改结果集中所有字段中的数据,sql,database,replace,syntax,data-manipulation,Sql,Database,Replace,Syntax,Data Manipulation,基本上,这个主题。我通过Web界面访问数据库,该界面使用Web表单提交SQL查询。数据库处于只读模式,因此无法使用UPDATE语句。另外,请注意,我需要同时处理所有字段。以下是我尝试过的: SELECT *, REPLACE((SELECT * FROM sf0314.groups), ':', ';') FROM sf0314.groups WHERE group_id < 1000 服务器回复了以下错误消息: 查询中出错:子查询只能返回一列 我还尝试使用AS来引用主选择中的所有字段,

基本上,这个主题。我通过Web界面访问数据库,该界面使用Web表单提交SQL查询。数据库处于只读模式,因此无法使用UPDATE语句。另外,请注意,我需要同时处理所有字段。以下是我尝试过的:

SELECT *, REPLACE((SELECT * FROM sf0314.groups), ':', ';')
FROM sf0314.groups
WHERE group_id < 1000
服务器回复了以下错误消息:

查询中出错:子查询只能返回一列

我还尝试使用AS来引用主选择中的所有字段,但也没有成功。我了解如何使用REPLACE更新结果集中的一个或多个命名字段。但是,问题是:


如何引用REPLACE语句中的多个all字段?谢谢大家!

你不能。REPLACE函数接受三个字符串参数,但不能接受列表或结果集。 您必须在select语句中列出所有列,然后向每列添加REPLACE函数

范例

编辑评论中的对话摘要

您可以使用RDBMS提供的元数据存储生成字段列表。在大多数数据库引擎中,信息模式包含元数据:

MySQL示例:

使用DMV的MSSQL示例:


感谢您的快速回复!我知道标准语法,但我认为有一种方法可以泛指所有字段,例如使用子查询或别名。欢迎使用!我不知道这有什么通用语法。当我遇到类似的问题时,我通常会生成select语句或至少是字段列表。您可以使用INFORMATION_SCHEMA及其表来获取MySQL中的列列表,或T-SQL中的系统视图dmv,或Oracle的系统视图,或任何他们称之为的内容:是的,我在这里看到了一个通过SCHEMA表自动迭代字段的解决方案,但我不确定是否有权访问该解决方案。系统仅通过Web界面提供访问:-。所以,如果我有读取系统表的凭证,并且能够找到它们的名称,那么也许我能够使用这种方法。我真的很喜欢有人提出的concat解决方案,但几分钟后答案就消失了。作者可能删除了它,意识到它不起作用。奇怪的是,因为我在这里找到了类似的解决方案……如果您可以读取表,那么在大多数rdbms中,您可以读取元数据表,也就是系统表。它们将只包含那些表中您可以使用的信息。大多数RDM中的信息模式实现基于视图,视图根据当前用户的权限动态过滤数据。试一试:从MySQLI的INFORMATION_SCHEMA.COLUMNS中选择*我刚刚编辑了原始答案,以涵盖注释中提供的信息。我还添加了一些例子,你可以做到。但是您需要使用动态sql。下面是一个更新示例:concat解决方案的第二个答案去了哪里?它就这样消失了!海报把它删掉了suspect@PeterRing:谢谢!当您说动态SQL时,我假设您指的是存储过程或UDF。“我说得对吗?”弗雷德:谢谢!我喜欢concat解决方案,希望海报会回来。
SELECT
    REPLACE(field1, ':', ';') AS field1
    REPLACE(field2, ':', ';') AS field2,
    REPLACE(field3, ':', ';') AS field3,
    REPLACE(field4, ':', ';') AS field4,
FROM
    YourTable
SELECT
    CONCAT('REPLACE(`', C.COLUMN_NAME, '`, '':'', '';'')')
FROM
    information_schema.COLUMNS C
WHERE
    C.TABLE_SCHEMA = '[YourDatabaseName]'
    AND C.TABLE_NAME = '[YourTableName]'
USE [YourDatabaseName];

SELECT
    'REPLACE([' + C.name + '], '':'', '';'')'
FROM
    sys.columns C
WHERE
    C.object_id = OBJECT_ID('[schema].[table]')