Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
C# 在T-SQL中追加数据_C#_Sql_.net_Sql Server 2012 - Fatal编程技术网

C# 在T-SQL中追加数据

C# 在T-SQL中追加数据,c#,sql,.net,sql-server-2012,C#,Sql,.net,Sql Server 2012,我有一个sql transact-sql-sql server 2012,用于从表客户获取客户名称,该表客户具有表详细信息中的有效地址: Select Customer.Name, Details.Address from Customer left outer join Details on Details.Customer = Customer.Name 这用于每次从db服务器发回每个客户的每个记录名称行。没有提取多条记录 最近,我需要修改这个sql文本,以便根据数据库获取他们借来的书

我有一个sql transact-sql-sql server 2012,用于从表客户获取客户名称,该表客户具有表详细信息中的有效地址:

Select Customer.Name, Details.Address 
from Customer 
left outer join Details on Details.Customer = Customer.Name
这用于每次从db服务器发回每个客户的每个记录名称行。没有提取多条记录

最近,我需要修改这个sql文本,以便根据数据库获取他们借来的书籍的名称,该名称保存在另一个表中。现在脚本看起来像:

Select Customer.Name, Details.Address, Lending.BookName 
from Customer 
left outer join Details on Details.Customer = Customer.Name 
left outer join Lending on Lending.CustomerName = Customer.Name
它正在正确地返回记录,但现在我遇到了一个问题。由于客户可以借多本书,因此返回的数据具有同一客户的多行,显示多个书名。根据我的软件规范,我需要为每个客户提取一行,在这一行中,我需要将所有的书名附加到一列中。 有人能帮我吗:如何在一列中为同一记录附加多个数据,例如:

Name    Address    BookName
Somdip  XX         Brief History of Time,Headfirst SQL,Headfirst C#
而不是

Name    Address    BookName
Somdip  XX         Brief History of Time
Somdip  XX         Headfirst SQL
Somdip  XX         Headfirst C#
??试试这个:

SELECT Name,
       Address    ,
       Split.a.value('.', 'VARCHAR(100)') BookName
FROM   (SELECT Name,
               Address    ,
               Cast ('<M>' + Replace(BookName, ',', '</M><M>') + '</M>' AS XML) AS Data
        FROM   [table]) AS A
       CROSS APPLY Data.nodes ('/M') AS Split(a) 

虽然我认为这通常是一个坏主意——在一个单元格中返回多个数据项——但有很多方法可以实现这一点,其中涉及到不同的性能问题


您要查找的内容如下:

我将上面的sql文本与“where”和“order by”子句一起使用,例如:

SELECT Name,
       Address    ,
       Split.a.value('.', 'VARCHAR(100)') BookName
FROM   (SELECT Name,
               Address    ,
               Cast ('<M>' + Replace(BookName, ',', '</M><M>') + '</M>' AS XML) AS Data
        FROM   [table] where ID = '1' order by Name) AS A
       CROSS APPLY Data.nodes ('/M') AS Split(a)

这给了我一个错误:ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML。

查看此组实例模拟:我通过C编程从服务器获取数据集中的值。但是上面的代码是针对xml的…不是吗??!!对不起,我不太懂sql…@SomdipDey这是sql的SERVER@SomdipDey在C中,您可以拆分字符串,u将得到所需的OPHMM。还有一件事,名字、地址和书名来自不同的表格……那么如何处理呢?我如何修改上面的sql来做到这一点?@SomdipDey是的,您可以使用派生表或CTE[table]将是您的派生表/CTE现在将order by子句放在Splita之后,它正在工作,但它正在生成另一个错误:XML解析:第1行,字符23,非法名称字符