Mat*_*lly 5 sql sql-server select dynamic-sql
我已经研究了几天,感觉自己在兜兜转转。我有 SQL 的基本知识,但有很多我不了解的领域。
我有一个表,用于存储数据库中所有其他表的名称和字段。
tblFields
===================================================
TableName FieldName BookmarkName
---------------------------------------------------
Customer FirstName CustomerFirstName
Customer LastName CustomerLastName
Customer DOB CustomerDOB
Run Code Online (Sandbox Code Playgroud)
我想写一个SELECT像下面这样的语句,但我无法让它工作:
SELECT (SELECT [FieldName] FROM [TableName]) FROM tblFields
Run Code Online (Sandbox Code Playgroud)
这可能吗?我开发的应用程序需要用户自定义报告。
如果我明白你想做什么,我想这会对你有帮助。它并不漂亮,并且适用于 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
Run Code Online (Sandbox Code Playgroud)
编辑:正如马丁建议的那样,我进行了编辑,以便列和表名使用 QUOTENAME
如果我正确理解您想要执行的操作,那么您最好将其作为程序中的两个单独的查询来执行。其中一个获取您想要选择的字段,然后在程序中使用该字段来构建实际获取数据的第二个查询。
如果必须完全用 SQL 完成,那么您需要告诉我们您正在使用什么数据库。如果是 SQL Server,您可以在第一个查询上使用游标来构建第二个查询,然后使用 sp_executesql 存储过程执行该查询。但建议在 SQL 之外执行此操作。