我想创建一个存储过程,在其中我将传递一个id,我想根据它选择一个列。
假设我的表有列,即id,theme1,theme2,theme3,theme4,theme5等。
我需要一个查询,根据我的输入选择列。就像我传递id = 3一样,它应该给出theme3列作为结果。
这种类型的动态查询有可能吗?
答案 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等。
如果你能改变这个,你真的应该......
每当您认为需要将号码设置为列名称时(例如Tel1
,Tel2
或Theme1
,Theme2
)对于糟糕的设计非常强烈的暗示 ......
如果可能的话尝试类似
的内容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命令并执行它。问题是