2016-06-21 31 views
0

我有一个表格,其中一个字段中的数据是另一个表格中的字段名称。如何在两个表格之间动态链接

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

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

我想提取B.Number001的值。

不太熟悉SQL如此详细的答案,赞赏。

+2

请自己帮忙,改变模式,为您节省很多麻烦。 –

+0

首先,感谢您花时间回答我的问题。我会试试看。其次,我同意这个模式是可怕的。但它不是我的。我正在尝试写一个基于软件包的报告:( – EMarkus

回答

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 0从TableA或根本没有参数。

如果ID获得通过,也只能从表B返回列,如果没有ID获得通过,只会做一个select * from TableB

要获得唯一Number001场从tableB的

Exec get_DataFromTableB 1 

要获得所有来自桌面B的字段B

Exec get_DataFromTableB 
相关问题