根据sys.columns中返回的值构建SELECT语句

时间:2015-06-02 19:40:28

标签: sql-server tsql sql-server-2012

所以,我试图弄清楚如何(如果可能的话)返回只有2列的结果集,其行与给定表名中的列数成正比,而不使用动态SQL函数: EXEC

实施例。我有桌子'tblA':

CREATE TABLE [dbo].[tblA](
[ColumnA] [varchar](20) NOT NULL,
[ColumnB] [varchar](20) NOT NULL,
[ColumnC] [varchar](20) NOT NULL
)

我有很多人

CREATE TABLE [dbo].[tblB](
[Column1] [varchar](20) NOT NULL,
[Column2] [varchar](20) NOT NULL
)

我可以通过运行来找到列:

 SELECT c.name From sys.columns c inner join sys.tables t on c.object_id = t.object_id Where t.name = 'tablename'

我最终想要返回一个包含2列的表,其列数等于我查询的表名中的列数。例如,

SELECT ColumnA, ColumnB, ColumnC FROM tblA WHERE ColumnA = ??? 

最终会被插入表格中:

TABLE [dbo].[ResultTable](
[ColumnName] [varchar](max) NOT NULL,
[ColumnValue] [varchar](max) NOT NULL
)

那么sp返回的内容有点像:

----------------------------
| ColumnName | ColumnValue |
----------------------------
| ColumnA    | Hello       |
----------------------------
| ColumnB    | World       |
----------------------------
| ColumnC    | Fubar       |
----------------------------

但是使用tblB会给你

----------------------------
| ColumnName | ColumnValue |
----------------------------
| Column1    | ABCDE       |
----------------------------
| Column2    | 12345       |
----------------------------

如果tblA有X列,那么返回的集合将有X行,但仍然有两列。我知道这可以通过使用 exec 函数来完成,但不知道是否可以不使用它?

1 个答案:

答案 0 :(得分:1)

def reverse(list, number):
    for i in range (0,length(my_list)-1):
            for num in number:
                if num == number:
                    new_list.append(my_list[i-num])
    return new_list