Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据输入参数从表中动态获取列_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

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

Sql 根据输入参数从表中动态获取列,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我想创建一个存储过程,在其中我将传递一个id,并根据它选择一列 假设我的表有列,即-id、theme1、theme2、theme3、theme4、theme5等 我需要一个查询,它将根据我的输入选择列。比如,如果我传递id=3,那么结果应该是3列 这种类型的动态查询有什么可能的方法吗 我想这会对你有所帮助, 序号位置将帮助您查找列详细信息 SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCH

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

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

我需要一个查询,它将根据我的输入选择列。比如,如果我传递id=3,那么结果应该是3列


这种类型的动态查询有什么可能的方法吗

我想这会对你有所帮助, 序号位置将帮助您查找列详细信息

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

假设我的表有列,即-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,我真的不推荐它!这是一个非常糟糕的方法

更新仅为完成: 这将动态创建一个SQL命令并执行它。问题是

  • 无特别/内联方法
  • 检索结果的使用是-嗯-繁琐的

您使用哪个数据库?例如Oracle、SQLServer、MySQL等@user75ponic SQLServerYes,您可以在变量中设置SQL语句并使用sp_executesl动态查询是您的解决方案查看查看我的答案,如果有帮助,请将其标记为答案。在获得列名后,她可以使用动态查询来构造sql语句,但OP已经知道列名。。。当传递
3
时,它应该是
从某处选择主题3
,当传递
2
时,它应该是
从某处选择主题2
。顺便说一句:表模式中列的顺序位置是您永远不应该依赖的。。。
DECLARE @passedInId INT=3;
DECLARE @cmd VARCHAR(MAX)='SELECT Theme' + CAST(@passedInId AS VARCHAR(MAX)) + ' FROM YourTable WHERE ...';
EXEC(@cmd);