选择除 IDENTITY 列之外的所有列

Ana*_*hav 6 sql sql-server vbscript

我试图显示表中除 IDENTITY COLUMN 之外的所有可用列。是否可以?

伪代码会是这样的。

SELECT * FROM Tab1 WHERE IDENTIY = NULL
Run Code Online (Sandbox Code Playgroud)

或者

SELECT * FROM Tab1 WHERE IDENTIY <> 'YES'
Run Code Online (Sandbox Code Playgroud)

这显然是无效的。但我想实现这样的目标。是否可以??

附言。我通过 VBScript 的 SQL 服务器连接来执行此操作,并且我不想对列名称进行硬编码(显然是为了灵活性)。

这是 VbScript 片段。

SQL_Cols = "select Column_name from Information_schema.columns where Table_name = 'Tab1'"
Recordset.open SQL_Cols,ConnString
p = recordset.getrows()
STR_Cols = ""
for i=1 to Ubound(p,2)   ' from 1 to UBound since in p(0,0) name of identity column is stored   
    if i = Ubound(p,2) Then
        STR_Cols  = STR_Cols  &"["&p(0,i)&"]" 
    else
        STR_Cols  = STR_Cols  &"["&p(0,i)&"],"
    end if
NEXT
Recordset.close
Run Code Online (Sandbox Code Playgroud)

STR_Cols存储所有列名(第一个列名除外(这是一个标识列))

我稍后用它来执行下行流任务。只有一件事这工作绝对正常。仅当第一列是 IDENTIY 列时,这才有效,如果表发生更改,则必须更改代码。我希望代码尽可能灵活和健壮。

Gan*_*kar 5

尝试这样:

sys.columns=包含与特定数据库有关的所有列

sys.tables=包含与特定数据库有关的所有表

sys.identity_columns=包含与特定数据库有关的所有标识列

因此,可以通过以下方式生成结果joinsis_identity=1排除标识列,并将Not IN所有列添加到特定表

select c.name from sys.columns c
join sys.tables AS t
on t.object_id=c.object_id
where c.name not in (select name from sys.identity_columns where is_identity=1)
and  t.name='MyTableName'
Run Code Online (Sandbox Code Playgroud)