我有一个表,其中一个字段中的数据是另一个表中的字段名称。
我想基于该字段从第二个表中提取数据。 例如:
A
有一个名为FldName
的列。 FldName
的值为Number001
。B
有一列名为Number001
。我想提取B.Number001
。
不太熟悉SQL,所以我们非常感谢您的详细解答。
答案 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