存储在表中的值生成SQL动态SELECT语句

7

我已经研究了几天,感觉自己一直在打转。虽然我有基本的SQL知识,但还有很多地方我不理解。

我有一张表格,存储了我的数据库中所有其他表格的名称和字段。

tblFields
===================================================

TableName      FieldName     BookmarkName  
---------------------------------------------------
Customer       FirstName     CustomerFirstName  
Customer       LastName      CustomerLastName  
Customer       DOB           CustomerDOB  

我想写一个像下面这样的SELECT语句,但我无法使其工作:

SELECT (SELECT [FieldName] FROM [TableName]) FROM tblFields

这是可能的吗?我开发的应用需要这个功能来实现用户报告的自定义。


我不明白你想做什么。 - Mirgorod
你可以使用字符串构造函数来创建此查询 - 但可能需要使用另一种语言(例如C#)来构建查询,然后对数据库运行它。 - Darbio
你需要说明RDBMS(和版本)。 - Martin Smith
2个回答

6

如果我理解你想做的事情,我认为这会对你有所帮助。虽然不太美观,但适用于SQL Server 2005及以上版本,也许这正是你需要的:

declare @tableName nvarchar(100)
declare @sqlQuery nvarchar(max)
declare @fields varchar(500)
set @tableName = 'YourTableName'
set @fields = ''
select @fields = @fields + QUOTENAME(t.fieldname) + ',' from (
select distinct fieldname from tblfields where tablename = @tableName)t


set @sqlQuery = 'select ' + left(@fields, LEN(@fields)-1) + ' from ' + QUOTENAME(@tableName)

execute sp_executesql @sqlQuery

编辑:如Martin所建议的那样,我进行了编辑,使列和表名使用了QUOTENAME。


你应该在列名和表名中使用 QUOTENAME - Martin Smith
嗨Radu,谢谢你的回答。像Michael一样,你的答案基本上就是我想到的。由于他先回答了,所以我标记了Michael的答案为正确答案。 :) - Matthew Dally

2
如果我正确理解您尝试做的事情,最好从程序中进行两个单独的查询。第一个查询获取您想要选择的字段,然后在程序中使用这些字段构建第二个查询以实际获取数据。
如果必须完全在SQL中完成,则需要告诉我们您正在使用哪个数据库。如果是SQL Server,则可以在第一个查询上使用游标来构建第二个查询,然后使用sp_executesql存储过程执行该查询。但建议在SQL之外执行。

嗨,Michael,谢谢你的回答。在我发布问题后,我离开了一段时间并对问题进行了一些调整,但你的答案基本上就是我想到的。 - Matthew Dally
我有一个书签表格,其中列出了数据库中每个字段和相关的书签名称。我有第二个表格,其中列出了在Word文档中找到的所有书签,我想用数据库值替换它们。我正在使用一个存储过程,从包含书签名称和值的两个表格生成XML代码,然后我使用该代码更新Word文档。 - Matthew Dally

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接