sql-server - SQL Server 有没有办法从给定列表中选择列

标签 sql-server dynamic-sql

我有一个动态列列表,然后选择列表中表中的列。

例如

Select (List of columns) 
from tablename

这是我的代码

SET NOCOUNT ON;

DECLARE @table TABLE(cols varchar(50));

DECLARE @tablename NVARCHAR(255);
DECLARE @tableid INT;
DECLARE @sSQL NVARCHAR(500);

SET @tableid = (SELECT DISTINCT TABLEID FROM faciltyShowedDetails WHERE layerid = @layerid);
SET @tablename = (SELECT dbo.FNC_Search_GetSearchTable(@tableid))

INSERT INTO @table(cols)
    SELECT COLUMN_NAME 
    FROM faciltyShowedDetails 
    WHERE layerid = @layerid;

我想从@table中的列列表中选择。

最佳答案

您将构建查询并使用动态 SQL。假设“列表”确实是一个逗号分隔的列表:

declare @sql nvarchar(max);

set @sql = 'select [cols] from tablename';

set @sql = replace(@sql, '[cols]', @cols);

exec sp_executesql @sql;

编辑:

要从表中获取列,您可以使用技巧:

declare @cols varchar(max);

select @cols = ', ' + columnname
from @table t;

然后您必须删除前面代码中的第一个逗号(使用 stuff())。

关于sql-server - SQL Server 有没有办法从给定列表中选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45406343/

相关文章:

sql-server - 如何自动将sql查询结果保存到.csv文件

来自存储在表中的值的 SQL 动态 SELECT 语句

sql - 对称交叉连接

python - 如何从 Python、PyODBC、SQL 返回中去除 "(),"?

sql - 计算表中每一列的值

sql - 更新以特定字符串开头的多个列

sql-server - 使用动态 T-SQL 将数据类型 nvarchar 转换为 float 时出错

postgresql - 要忽略 PostgreSQL 的 BEFORE TRIGGER 中的结果?

sql-server - 已成功与服务器建立连接,但登录过程中出现错误。 (错误号 : 233)

sql - 在 SQL Server 中,如何创建表的引用变量?