admin

根据各行的表进行联接

sql

假设我有一个Example包含三列的表格:X, TableName, ColumnName

TableName将表的名称存储在数据库中,并ColumnName存储我要加入的列的名称X。问题在于,需要将不同的行(以明确定义的方式)连接到不同的表。

我希望能够执行以下操作:

Select *
from Example join TableName on X = ColumnName

这显然是行不通的。

我很新,并且做了一些谷歌搜索,由于表和列的名称存储在数据库中,因此似乎可以使用游标在行上循环并使用动态SQL,但是我听说游标和动态SQL均应避免,因此我没有详细研究。我希望有一种解决此问题的首选方法。

谢谢。


阅读 223

收藏
2021-07-01

共1个答案

admin

动态SQL 可能 比存储的proc ,但并非总是如此,并且随着SQL
Server的成熟,动态SQL变得更好。只要有可能,都应使用非动态SQL,因为它更干净且易于维护。但是,动态SQL确实占有一席之地(诸如Entity
Framework和NHibernate之类的ORM工具几乎只使用动态sql)。应该尽可能避免使用游标,但是SQL确实支持WHILE循环,可以代替使用它。

DECLARE @Identity int = SELECT MIN(ex.Identity) FROM Example ex
DECLARE @TableName varchar(200)
DECLARE @ColumnName varchar(200)
WHILE @Identity IS NOT NULL BEGIN
    SELECT
        @TableName = ex.TableName,
        @ColumnName = ex.ColumnName
    FROM
        Example ex
    WHERE
        ex.Identity = @Identity

    /*
        build and execute your dynamic sql here
    */
    SET @Identity int = SELECT MIN(ex.Identity) FROM Example ex WHERE ex.Identity > @Identity
END
2021-07-01