c# - 在每个列名前加上一个特定的字符串?

标签 c# sql-server

我正在尝试手动将一些行映射到它们相应类的实例。我知道我需要使用每个表的每一列,并将所有这些列从一个表映射到给定的类。

但是,我想知道是否有更简单的方法来做到这一点。现在,我有一个名为 School 的类和一个名为 User 的类。这些类中的每一个都有一个 Name 属性和其他属性(但“Name”是重要的一个,因为它是两个类的共同名称)。

现在,我正在执行以下操作以将它们映射下来。

SELECT u.SomeOtherColumn, u.Name AS userName, s.SomeOtherColumn, s.Name AS schoolName FROM User AS u INNER JOIN School AS s ON something

我很想执行以下操作,但我不能,因为 Name 是类之间的共同名称。

SELECT u.*, s.* FROM User AS u INNER JOIN School AS s ON something

然而,这会产生一个错误,因为它们都有 Name 列。我可以以某种方式为它们添加前缀吗?比如这样?

u.user_*, s.school_*

这样每个表的每一列都有一个前缀?例如 user_Nameschool_Name?

最佳答案

几年前,我编写了一堆函数和过程来帮助我为 SQL Server 和使用动态 SQL 的应用程序开发自动代码生成例程。这是我认为对您的情况最有帮助的一个:

Create FUNCTION [dbo].[ColumnString2]
(
    @TableName  As SYSNAME,       --table or view whose column names you want
    @Template   As NVarchar(MAX), --replaces '{c}' with the name for every column,
    @Between    As NVarchar(MAX)  --puts this string between every column string
)   
    RETURNS NVarchar(MAX) AS
BEGIN
    DECLARE @str As NVarchar(MAX);

    SELECT  TOP 999
        @str = COALESCE(
                @str + @Between + REPLACE(@Template,N'{c}',COLUMN_NAME), 
                REPLACE(@Template,N'{c}',COLUMN_NAME)
                        )
    FROM    INFORMATION_SCHEMA.COLUMNS
    WHERE   TABLE_SCHEMA= COALESCE(PARSENAME(@TableName, 2), N'dbo')
      And   TABLE_NAME  = PARSENAME(@TableName, 1)
    ORDER BY ORDINAL_POSITION

    RETURN @str;
END

这允许您格式化表格的所有列名称或以任何您想要的方式查看。只需将一个表名和一个带有'{c}' 的模板字符串传递给它,您希望为每一列插入列名。它将为 @TableName 中的每一列执行此操作,并在它们之间添加 @Between 字符串。

下面是一个示例,说明如何垂直格式化表的所有列名称,并以适合包含在 SELECT 查询中的方式使用前缀重命名它们:

SELECT dbo.[ColumnString2](N'yourTable', N'
    {c} As prefix_{c}', N',')

此函数旨在与动态 SQL 一起使用,但您也可以通过在 Management Studio 中执行它并将输出设置为文本(而不是网格)来使用它。然后将输出剪切并粘贴到所需的查询、 View 或代码文本中。 (请务必更改文本结果的 SSMS 查询选项,以将“显示的最大字符数”从 256 提高到最大值 (8000)。如果您仍然无法使用,那么您可以将此过程更改为将每一列输出为单独的行而不是单个大字符串的函数。)

关于c# - 在每个列名前加上一个特定的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16615389/

相关文章:

sql-server - 将 SQL SERVER (RDS) 事务实时流式传输到 NoSQL

sql-server - 如何调用具有输入和输出参数的 SQL Server 过程?

mysql - HTTP 500 - 内部服务器错误 - 部署示例 Tomcat Web 应用程序

c# - 如何使用 .NET 接收邮件?

c# - 位置 C# 位置文本

c# - 使用多个数据库与使用单个数据库的优缺点

sql-server - 混淆数据库表名

c# - Windows 窗体/WPF 太大,我该如何拆分?

c# - node js中的Windows命名管道(首选共享内存)

c# - 静态类从基更改成员派生