【问题标题】:How to write Select query by taking n-1 column names [duplicate]如何通过采用 n-1 列名称来编写 Select 查询 [重复]
【发布时间】:2013-10-05 09:12:15
【问题描述】:

在我的数据库表中我有

 sr_no
 FID
 DOJMU
 DOJMCIS
 Designation
 UpdateDate

我必须编写一个选择命令,以便我应该选择除sr_no 之外的每个字段。我知道我们可以将它写为Select FID,DOJMU,DOJMCIS,Designation,UpdateDate from TableName。但对我来说,我需要查询为select * from table name 但它应该排除一个列名可以吗?

因为我需要在 C#(asp.net with c#) 中执行这个查询,所以我有以下代码

select p.Name,m.* from Publication_det m INNER JOIN Personal_det p  ON m.FID= p.FID 

@Start 和 @End 之间的 m.updateDate 这里可以看到m.*代表了上面的select * from table name,所以在执行sr_no的同时也会显示,所以我需要一个使用n-1列名的解决方案。

【问题讨论】:

  • Select * 从表中选择 ALL - 我认为除了为它写单独的列名之外别无他法

标签: c# asp.net sql sql-server-2008


【解决方案1】:

没有标准 SQL 方法可以通过选择来执行此操作,要么您必须列出它们,要么全部选择它们。在 TSQL 中,动态查询可能会为您提供所需的结果,但复杂性比您的常规选择要高很多。

如果它或多或少是一个静态查询,你可以为它创建一个视图;

CREATE VIEW test_view AS 
  SELECT FID,DOJMU,DOJMCIS,Designation,UpdateDate 
  FROM test;

然后是常规;

SELECT * FROM test_view;

...会得到你想要的列。

【讨论】:

    【解决方案2】:

    您可以使用动态 SQL 查询来做到这一点。

    例如:

    DECLARE @cols AS VARCHAR(MAX)
    DECLARE @SQL AS VARCHAR(MAX)
    
    SET @cols = STUFF
                (
                    (
                        SELECT distinct ',' + QUOTENAME([name]) 
                        FROM   syscolumns 
                        WHERE  id = 
                               (
                                   SELECT id 
                                   FROM   sysobjects 
                                   WHERE  type = 'V' 
                                          AND [Name] = 'TableName'
                               ) 
                               AND [name] not in ('sr_no')--you may define more names here
                        FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                     ,1
                     ,1
                     ,''
                )
    
    SET @SQL = 'SELECT ' + @cols + ' FROM TableName'
    
    EXEC(@SQL)
    

    【讨论】:

      【解决方案3】:

      你有两个选择:

      1) 声明@tablename varchar(50) = 'submission_mst'

      select 'Select '+
      stuff
      ((
      select ', '+ t.name
      from  (
      select name ,[object_id] from sys.columns where object_id in (select object_id from   sys.tables where name =@tablename)
      and name <>'MGAName'
      )t
      for xml path ('')),1,1,'') + ' from'+ @tablename
      

      2)

      SELECT * INTO #TempTable  FROM tablename
      ALTER TABLE #TempTable  DROP COLUMN columnname
      SELECT * FROM #TempTable
      DROP TABLE #TempTable
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-12
        相关资源
        最近更新 更多