我在表格中有100列,我想列出除特定列之外的99列。
如何排除列名?
答案 0 :(得分:7)
Tutorial D关系数据库查询语言允许使用ALL BUT
根据要删除的属性表示投影,但SQL中没有这样的等效语法允许您执行此操作。您需要明确列出您想要的具体内容。
如果您通常需要同一组列,则可以使用View。
答案 1 :(得分:6)
SELECT column_1, column_2, column_3,
/* ...the list of columns 4-97, not shown in this example... */,
column_98, column_99
FROM table
没有更简单的方法(可能是设计):您需要专门列出要检索的每个列。
尽管写入很麻烦,但这实际上是一件好事:不鼓励在生产代码中使用SELECT *
(出于性能和可维护性的原因) - 请参阅例如this question
答案 2 :(得分:2)
你做不到。
理论上,你可能在这里涉及动态sql - 一些过程将循环遍历表的所有列(例如,Oracle中的all_tabs_columns
字典视图列出所有表的所有列),并形成{{ {1}},但我强烈反对你这样做。将为您节省几行代码,但难以维护。 :)
答案 3 :(得分:1)
试试这个。
DROP TABLE #MY_TEMP_TABLE
CREATE TABLE #MY_TEMP_TABLE
(
Column_1 int NULL,
Column_2 varchar(10) NULL,
Column_3 datetime NULL
)
INSERT INTO #MY_TEMP_TABLE(Column_1, Column_2, Column_3)
SELECT 1, 'a', GETDATE()
UNION SELECT 2, 'b', GETDATE()
UNION SELECT 3, 'c', GETDATE()
UNION SELECT 4, 'd', GETDATE()
DECLARE @dSQL nvarchar(1000)
SELECT @dSQL = 'SELECT TOP 10 '
SELECT @dSQL = @dSQL + LEFT(nst.ColumnList, LEN(nst.ColumnList)-1) --AS 'List'
FROM (SELECT so.id
FROM TEMPDB..SYSOBJECTS so
WHERE so.name LIKE '#MY_TEMP_TABLE%'
AND so.type = 'u') so
CROSS APPLY (SELECT sc.Name + ', '
FROM TEMPDB..SYSCOLUMNS sc
WHERE sc.id = so.id
AND sc.colid <> 3
FOR XML PATH('')) nst
(ColumnList)
SELECT @dSQL = @dSQL + ' FROM #MY_TEMP_TABLE'
EXEC sp_executesql @dSQL
答案 4 :(得分:1)
更快的查询解决方案!用粗体显示您要删除的表名和列名。您可以添加要删除的字段。
DECLARE @query nvarchar(max)=(SELECT string_agg(COLUMN_NAME,',') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='YOURTABLENAME'
AND COLUMN_NAME NOT IN ('REMOVEDCOLOUMN',.........))
SET @query ='select '+@query+' FROM YOURTABLENAME' EXEC sp_executesql @query;