gpt4 book ai didi

sql - 基于按行变化的表进行联接

转载 作者:行者123 更新时间:2023-12-04 05:30:05 24 4
gpt4 key购买 nike

假设我有一张 table Example三列:X, TableName, ColumnName .
TableName存储数据库中的表名,ColumnName存储我想加入的列的名称 X到。问题是不同的行需要连接到不同的表(以明确定义的方式)。

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

Select *
from Example join TableName on X = ColumnName

这显然行不通。

我很新,做了一些谷歌搜索,似乎我可以使用游标来遍历行并使用动态 SQL,因为表和列的名称存储在数据库中,但我听说过应该避免游标和动态 SQL,所以我没有研究它的细节。我希望有一种首选的方法来解决这个问题。

谢谢。

最佳答案

动态 SQL 可以慢一点比存储过程,但并非总是如此,并且随着 SQL Server 的成熟而变得更好。只要有可能,就应该使用非动态 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

关于sql - 基于按行变化的表进行联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com