2

所有,这是我以前没有做过的事情,由于某种原因我找不到类似的问题。我希望在 C#中返回NVARCHAR @columnHeaders到 a 。String将构建我想要的字符串的 SQL 查询是这个

DECLARE @columnHeaders NVARCHAR(MAX); 
SELECT @columnHeaders = 
    COALESCE (@columnHeaders + ',[' + Field + ']', '[' + Field + ']') 
FROM SomeTable;

但是,我如何将变量@columnHeaders拉回 C#?注意,我可以使用函数等,但我不想使用存储过程、视图或函数,除非绝对必要......

我可以选择使用的列DataTable标题

DECLARE @columnHeaders NVARCHAR(MAX); 
SELECT COALESCE (@columnHeaders + ',[' + Field + ']', '[' + Field + ']') 
FROM SomeTable;

并在 C# 中进行操作,但最好直接从 SQL 返回字符串。

谢谢你的时间。

4

3 回答 3

3

如果您不想使用存储过程,这可能会起作用。

DECLARE @columnHeaders NVARCHAR(MAX);  
    SELECT @columnHeaders =  
    COALESCE (@columnHeaders + ',[' + Field + ']', '[' + Field + ']')  
    FROM SomeTable; 
    select @columnHeaders

并用于ExecuteScalar()获取结果。

但是,我个人会推荐存储过程更加整洁,因为它将 SQL 保留在 SQL Server 中。

于 2012-09-04T12:44:11.370 回答
2

我相信第二个语句是不返回的,它会变成一个赋值过程:

DECLARE @columnHeaders NVARCHAR(MAX); 
SELECT @columnHeaders = 
    COALESCE (@columnHeaders + ',[' + Field + ']', '[' + Field + ']') 
FROM SomeTable;

您必须这样做,只需在最后一行添加@columnHeaders 的选择:

DECLARE @columnHeaders NVARCHAR(MAX); 
SELECT @columnHeaders = 
    COALESCE (@columnHeaders + ',[' + Field + ']', '[' + Field + ']') 
FROM SomeTable;
select @columnHeaders as ch;

然后在你的 C# 上:

da.Fill(dt);
Console.WriteLine(dt.Rows[0]["ch"]);
于 2012-09-04T12:50:33.080 回答
1

如果您只想让查询返回它,您不想将数据存储在一个可病毒变量中。

尝试这个:

SELECT CAST(COALESCE (@columnHeaders + ',[' + Field + ']', '[' + Field + ']')  AS NVARCHAR(MAX))
FROM SomeTable;
于 2012-09-04T12:45:52.027 回答