SQL 列值到 table 名称

SQL column value to table name

在我的 SQL 数据库中,我想制作一个通用软件 link table。也许类似于以下内容:

create table soft_link(
  id uniqueidentifier, 
  name varchar(255),
  LINK uniqueidentifier,
  TABLE varchar(255),
  primary key(id));

假设我在数据库中的其他 table 中有对象 "b_object"。 LINK 列将是 b_object 的唯一标识符,而 TABLE 将是 table,其中 b_object 存储在数据库中。

现在我想制作一个存储过程"sp_ResolveSoftLink"。此方法将获取软 link 的 id,查找软 link 的 LINK 和 TABLE 列,然后使用 TABLE 和 LINK 查询 b_object.

以下是不正确的 SQL 语法,但希望它有助于说明我的问题。我想将这两个查询组合成一个存储过程和 return 第二个查询的结果:

select LINK, TABLE from soft_link where id = xxxxxx
select * from TABLE where id = LINK
-- return the result of the second select query

基本问题: How/can 我使用来自一个查询的 varchar return 在 SQL 中的同一存储过程中形成另一个查询?

您可以像这样创建一个存储过程。

这里,首先你必须将LINK和Table的值存储在变量中,然后使用这些变量形成另一个动态查询

CREATE PROC spName
@id INT
AS
BEGIN
  Declare @LINKValue uniqueidentifier, @TABLE varchar(255),@SQL varchar(max)

  SELECT @LINKValue = LINK , @TABLE = TABLE 
  FROM soft_link
  WHERE soft_link id = @id

  SET @SQL='SELECT * FROM';
  SET @SQL = @SQL +' ' + @TABLE
  SET @SQL = @SQL +' ' + 'WHERE ID ='  +' ' + @LINKValue

  PRINT @SQL   -- SEE Here This is what you actually Want
  --EXEC (@SQL)  --Then Execute this

END