如何在两个表格之间动态链接

时间:2016-06-21 22:29:36

标签: sql-server sql-server-2008

我有一个表,其中一个字段中的数据是另一个表中的字段名称。

我想基于该字段从第二个表中提取数据。 例如:

  • A有一个名为FldName的列。 FldName的值为Number001
  • B有一列名为Number001

我想提取B.Number001

的值

不太熟悉SQL,所以我们非常感谢您的详细解答。

1 个答案:

答案 0 :(得分:1)

样本表

CREATE TABLE TABLEA (ID INT , FldName SYSNAME)
GO
INSERT INTO TABLEA VALUES(1 , 'Number001')
GO

CREATE TABLE TABLEB (Number001 INT)
GO
INSERT INTO TABLEB VALUES (1),(2),(3)
GO

获取数据的程序

CREATE PROC get_DataFromTableB 
 @FieldID INT = NULL
AS
BEGIN
  SET NOCOUNT ON;
Declare @Sql Nvarchar(max), @ColName SYSNAME;

IF (@FieldID IS NULL) 
 BEGIN
   SET @Sql = N'SELECT * FROM TABLEB'
    Exec sp_executesql @Sql
 END
ELSE
 BEGIN
   SELECT @ColName = FldName FROM TABLEA
   SET @Sql = N'SELECT '+QUOTENAME(@ColName)+' FROM TABLEB'
   Exec sp_executesql @Sql
 END
END

程序调用

您可以将ID FieldName的{​​{1}}传递给TableA或根本不传递任何参数。

如果传递了ID,它只会从TableB返回该列,如果没有传递ID,它只会执行select * from TableB

仅从tableB获取Number001字段

Exec get_DataFromTableB 1 

从TableB获取所有字段

Exec get_DataFromTableB