根据输入参数动态获取表中的列

时间:2017-05-31 08:15:10

标签: sql sql-server tsql stored-procedures

我想创建一个存储过程,在其中我将传递一个id,我想根据它选择一个列。

假设我的表有列,即id,theme1,theme2,theme3,theme4,theme5等。

我需要一个查询,根据我的输入选择列。就像我传递id = 3一样,它应该给出theme3列作为结果。

这种类型的动态查询有可能吗?

2 个答案:

答案 0 :(得分:0)

我认为这会对你有帮助, Ordinal_Position将帮助您查找列详细信息

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
AND ORDINAL_POSITION = 2

https://www.mssqltips.com/sqlservertutorial/183/informationschemacolumns/

答案 1 :(得分:0)

  

假设我的表有列,即id,theme1,theme2,theme3,theme4,theme5等。

如果你能改变这个,你真的应该......

每当您认为需要将号码设置为列名称时(例如Tel1Tel2Theme1Theme2)对于糟糕的设计非常强烈的暗示 ......

如果可能的话尝试类似

的内容
CREATE TABLE Theme(ThemeID INT IDENTITY, ForeignID INT, ThemeRank INT, ThemeName VARCHAR(100));

SELECT *
FROM YourTable AS yt
INNER JOIN Theme AS th ON yt.ForeignID=th.ForeignID AND ThemeRank=@passedInValue;

回答你的问题:唯一的方法是动态创建SQL,我真的不推荐!这是一个非常糟糕的方法......

更新只是为了完成:

DECLARE @passedInId INT=3;
DECLARE @cmd VARCHAR(MAX)='SELECT Theme' + CAST(@passedInId AS VARCHAR(MAX)) + ' FROM YourTable WHERE ...';
EXEC(@cmd);

这将动态创建一个SQL命令并执行它。问题是

  • 没有ad-hoc /内联方法
  • 检索结果的使用是 - 嗯 - 麻烦......