Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 server 将PostgreSQL查询转换为SQL Server查询_Sql Server_Postgresql_Tsql_Split_Database Migration - Fatal编程技术网

Sql server 将PostgreSQL查询转换为SQL Server查询

Sql server 将PostgreSQL查询转换为SQL Server查询,sql-server,postgresql,tsql,split,database-migration,Sql Server,Postgresql,Tsql,Split,Database Migration,我需要转换我的查询 select unnest(string_to_array(names, ',')) as "Admin Name", unnest(string_to_array(phones, ',')) as "Admin Phone", unnest(string_to_array(emails, ',')) as "Admin Emails" from metadata_Table 转换为等效的SQL Server查询 有什么建议吗?在SL服务

我需要转换我的查询

select 
    unnest(string_to_array(names, ',')) as "Admin Name",
    unnest(string_to_array(phones, ',')) as "Admin Phone",
    unnest(string_to_array(emails, ',')) as "Admin Emails"
from 
    metadata_Table
转换为等效的SQL Server查询


有什么建议吗?

在SL服务器中,您不可能轻松做到这一点。没有“带序数的字符串_split()。而且,
string\u split()
不能保证排序

在Microsoft增强此功能之前,我的建议是递归子查询:

with cte as (
      select convert(varchar(max), null) as name, convert(varchar(max), null) as phone, convert(varchar(max), null) as email,
             convert(varchar(max), names + ',') as names_rest,
             convert(varchar(max), phones + ',') as phones_rest,
             convert(varchar(max), emails + ',') as emails_rest,
             0 as lev
      from metadata_Table
      union all
      select left(names_rest, charindex(',', names_rest) - 1),
             left(phones_rest, charindex(',', phones_rest) - 1),
             left(emails_rest, charindex(',', emails_rest) - 1),
             stuff(names_rest, 1, charindex(',', names_rest), ''),
             stuff(phones_rest, 1, charindex(',', phones_rest), ''),
             stuff(emails_rest, 1, charindex(',', emails_rest), ''),
             lev + 1
      from cte
      where emails_rest like '%,%'
     )
select *
from cte
where lev > 0;

将姓名/电话/电子邮件存储为逗号分隔的值违反1NF(原子性)。我会考虑重构这个表格。无论如何都可能有帮助。请显示示例数据和所需结果。Msg 402,级别16,状态1,第31行。数据类型text和varchar在add运算符中不兼容。这就是我想要的get@noyraz包括您在内的任何人都不应该在这么晚的时候使用文本数据类型。现在就更改您的模式,在您达到需要做更多工作的程度之前。