2016-09-25 53 views
0

我很新,SQL Server,C#等。但我每天都在学习,这很有趣!T-SQL到XML到C#返回到SQL

我需要从SQL Server中2个不同数据库中的2个表获取信息。将它变成.xml文件,用C#冒泡排序,然后将其传回到SQL Server中的第三个数据库中。

我已经把代码转换成XML文件,我的问题是如果我可以让他们成为一个.xml文件。

我学到的代码为每个表创建一个,所以来自2个数据库的2个表给我4个.xml文件。

SELECT * 
FROM [Database1].[dbo].[Table_1] 
ORDER BY NEWID() 
FOR XML AUTO 

SELECT * 
FROM [Database1].[dbo].[Table_2] 
ORDER BY NEWID() 
FOR XML AUTO 

SELECT * 
FROM [Database2].[dbo].[Table_1] 
FOR XML AUTO 

SELECT * 
FROM [Database2].[dbo].[Table_2] 
FOR XML AUTO 

它变成一个XML文件后,我必须把它放在C#和冒泡排序成SQL Server中的第三个数据库,你可以看到我至少可以拿我想要的数据,但是当它涉及到C#和泡沫排序它,我完全失去了。我一直在搜索,但我很难理解,所以我希望你们可以用更简单的方式尝试和解释。

+0

嗨马里克,欢迎来到SO。请允许我提一个提示:在这里你有两个问题:这是一个原则,在一个问题中保留*一个问题*。这使得跟踪用户更容易找到他们问题的答案。 – Shnugo

回答

0

一个部分是:如何做我得到4个XML结果转换成一个:

这是4个不同的电话,2人反对当前分贝,两名反对另一个数据库:

SELECT TOP 3 * 
FROM INFORMATION_SCHEMA.TABLES 
FOR XML RAW('INFORMATION_SCHEMA.TABLES'),ROOT('CurrentDb') 

SELECT TOP 3 * 
FROM INFORMATION_SCHEMA.COLUMNS 
FOR XML RAW('INFORMATION_SCHEMA.COLUMNS'),ROOT('CurrentDb') 

SELECT TOP 3 * 
FROM OtherDb.INFORMATION_SCHEMA.TABLES 
FOR XML RAW('INFORMATION_SCHEMA.TABLES'),ROOT('OtherDb') 

SELECT TOP 3 * 
FROM OtherDb.INFORMATION_SCHEMA.COLUMNS 
FOR XML RAW('INFORMATION_SCHEMA.COLUMNS'),ROOT('OtherDb') 

要获得相同的一个在一起,你只需要包这在一个外部选择内。并注意,TYPE ...

一些解释:如果你写SELECT * FROM xyz FOR XML RAW你会得到一个XML回来。这是一个完整而复杂的结构,但仍然是一个标量值。

SELECT (SELECT * FROM xyz FOR XML RAW) AS MyXML,'test' AS OtherColumn FROM SomeTable。你会得到你的XML,但逃脱文字表示。您必须指定,TYPE才能获得真实XML

SELECT 
(
    SELECT TOP 3 * 
    FROM INFORMATION_SCHEMA.TABLES 
    FOR XML RAW('INFORMATION_SCHEMA.TABLES'),ROOT('CurrentDb'),TYPE 
) 
,(
    SELECT TOP 3 * 
    FROM INFORMATION_SCHEMA.COLUMNS 
    FOR XML RAW('INFORMATION_SCHEMA.COLUMNS'),ROOT('CurrentDb'),TYPE 
) 
,(
    SELECT TOP 3 * 
    FROM OtherDb.INFORMATION_SCHEMA.TABLES 
    FOR XML RAW('INFORMATION_SCHEMA.TABLES'),ROOT('OtherDb'),TYPE 
) 
,(
    SELECT TOP 3 * 
    FROM OtherDb.INFORMATION_SCHEMA.COLUMNS 
    FOR XML RAW('INFORMATION_SCHEMA.COLUMNS'),ROOT('OtherDb'),TYPE 
) 
FOR XML RAW 
+0

你能解释更多吗?我测试了它,并且做了我想要的,但我不完全明白它为什么仍然可以工作。 – Marik

+0

@Marik,你好,我添加了一些解释...现在清除? – Shnugo

+0

是的,谢谢! – Marik