SQL动态SELECT语句来自存储在表中的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL动态SELECT语句来自存储在表中的值相关的知识,希望对你有一定的参考价值。

我已经研究了这几天,觉得我在圈子里四处走动。我有SQL的基本知识,但有很多领域我不明白。

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

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

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

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

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

这可能吗?我开发的应用程序要求用户自定义报告。

答案

如果我正确地理解了您要做的事情,那么您可能最好将其作为程序中的两个单独查询。获取您要选择的字段然后在程序中使用以构建实际获取数据的第二个查询。

如果它必须完全在SQL中完成,那么您需要告诉我们您正在使用的数据库。如果是SQL Server,您可以在第一个查询上使用游标来构建第二个查询,然后使用sp_executesql存储过程执行该查询。但建议在SQL之外进行。

另一答案

如果我明白你想要做什么,我认为这会对你有所帮助。它不漂亮,它适用于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

以上是关于SQL动态SELECT语句来自存储在表中的值的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL SELECT 语句中获取值,即使它在表中不存在

SQL SELECT DISTINCT 语句

SQL SELECT DISTINCT 语句

在表中动态记录 PLSql 语句

SQL SELECT DISTINCT 语句 用法

sql查询总结