information_schema 是描述数据库中对象的元数据——它不是你的表的占位符。
如果您只想从表中返回数据,那么
SELECT * FROM dbo.MATDATA WHERE 2 >= tmin AND 2<=tmax AND 1 = MatCode
如果要针对没有架构的表构建查询,则需要构建动态 SQL 查询,然后调用 sp_executesql。
编辑:
只选择一列:
SELECT EOComp FROM dbo.MATDATA WHERE 2 >= tmin AND 2<=tmax AND 1 = MatCode
编辑#2:
您更新后的问题与原来的 Q 不太相似,并且您已经接受了 Redfilter 的回答。
要选择动态列,您需要动态 SQL。但是您不能从 UDF 调用 procs,并且 UDF 应该返回标准类型(如果是标量)或表。
以下是从 SPROC 执行此操作的方法:
给定
create table dbo.MATDATA
(
Column1 INT,
Column2 NVARCHAR(100),
Column3 DateTime,
tmin int,
tmax int,
MatCode int
)
和过程
create proc dbo.GetColumnFromMATDATA(@spalte nvarchar(256))
as
begin
set nocount on
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'SELECT @spalte FROM dbo.MATDATA WHERE 2>= tmin AND 2<=tmax AND 1 = MatCode'
exec sp_executesql @SQL, N'@spalte nvarchar(256)', @spalte=@spalte
end
你可以这样做
exec dbo.GetColumnFromMATDATA 'Column1'
exec dbo.GetColumnFromMATDATA 'Column2'
exec dbo.GetColumnFromMATDATA 'Column3'
exec dbo.GetColumnFromMATDATA 'tmax'
等
但这一切都非常可怕,恕我直言。