Sql server 是否可以从表中选择除一列(例如ID)之外的所有列?
我使用的是一个第三方应用程序,每个表的列数都非常多。当我选择数据时,通常需要ID之外的所有列,或者ID和DateCreated之外的所有列Sql server 是否可以从表中选择除一列(例如ID)之外的所有列?,sql-server,ssms,Sql Server,Ssms,我使用的是一个第三方应用程序,每个表的列数都非常多。当我选择数据时,通常需要ID之外的所有列,或者ID和DateCreated之外的所有列 SELECT 'SELECT '+ SUBSTRING(LIST,1,LEN(LIST)-1) +' FROM [Person].[Address]' FROM ( SELECT '['+COL.COLUMN_NAME+'],' FROM INFORMATION_SCHEMA.COLUMNS COL LEFT JOIN
SELECT
'SELECT '+
SUBSTRING(LIST,1,LEN(LIST)-1)
+' FROM [Person].[Address]'
FROM
(
SELECT
'['+COL.COLUMN_NAME+'],'
FROM INFORMATION_SCHEMA.COLUMNS COL
LEFT JOIN
(
SELECT
CON.CONSTRAINT_TYPE,
USG.TABLE_SCHEMA,
USG.TABLE_NAME,
USG.COLUMN_NAME,
CON.CONSTRAINT_NAME,
USG.TABLE_CATALOG
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE USG
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS CON
ON USG.CONSTRAINT_NAME = CON.CONSTRAINT_NAME
)Q
ON COL.TABLE_SCHEMA = Q.TABLE_SCHEMA
AND COL.TABLE_NAME = Q.TABLE_NAME
AND COL.TABLE_CATALOG = Q.TABLE_CATALOG
AND COL.COLUMN_NAME = Q.COLUMN_NAME
WHERE COL.TABLE_SCHEMA ='Person'
AND COL.TABLE_NAME = 'Address'
AND
(
Q.CONSTRAINT_TYPE <> 'PRIMARY KEY'
OR
COL.COLUMN_NAME <> 'DateCreated'
)
FOR XML PATH(''))L(LIST)
使用sys.columns可以找出表中哪些列可用。如何使用此信息创建语句?执行此操作的最佳方法是什么?尝试使用动态查询:
DECLARE @Names VARCHAR(MAX)
SELECT @Names = COALESCE(@Names + ', ', '') + Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE Table_name='Table1'
And Column_Name!='ID'
DECLARE @Query VARCHAR(MAX)
SELECT @Query = 'SELECT '+ @Names + ' INTO Table2 FROM Table1'
exec (@Query)
SELECT * from Table2
此脚本将选择任何表的所有列,但表的主键列和列名称DateCreated除外
SELECT
'SELECT '+
SUBSTRING(LIST,1,LEN(LIST)-1)
+' FROM [Person].[Address]'
FROM
(
SELECT
'['+COL.COLUMN_NAME+'],'
FROM INFORMATION_SCHEMA.COLUMNS COL
LEFT JOIN
(
SELECT
CON.CONSTRAINT_TYPE,
USG.TABLE_SCHEMA,
USG.TABLE_NAME,
USG.COLUMN_NAME,
CON.CONSTRAINT_NAME,
USG.TABLE_CATALOG
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE USG
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS CON
ON USG.CONSTRAINT_NAME = CON.CONSTRAINT_NAME
)Q
ON COL.TABLE_SCHEMA = Q.TABLE_SCHEMA
AND COL.TABLE_NAME = Q.TABLE_NAME
AND COL.TABLE_CATALOG = Q.TABLE_CATALOG
AND COL.COLUMN_NAME = Q.COLUMN_NAME
WHERE COL.TABLE_SCHEMA ='Person'
AND COL.TABLE_NAME = 'Address'
AND
(
Q.CONSTRAINT_TYPE <> 'PRIMARY KEY'
OR
COL.COLUMN_NAME <> 'DateCreated'
)
FOR XML PATH(''))L(LIST)
将字符串Person替换为schema,Address替换为table name为什么不包括所有列,而忽略数据中也包含ID这一事实?您需要在SELECT语句中提供除此之外的所有列。如果您可以在SSMS中编写查询,只需打开数据库,向下滚动到要查看的表,单击旁边的小+图标,然后将Columns文件夹拖到查询窗口中。这将得到该表中所有列的列表。然后,您可以简单地删除您不需要的列。@Rob Anthony:我想使用except来查找双重数据。在ID中总是有一个唯一的数字,所以当我使用它时,它就不再起作用了。@SchmitzIT:我知道,这就是我现在所做的。我很懒……这很有效。我也喜欢你的加入。提到的ID是FK的,所以Jayasurya Satheesh的答案更合适。谢谢你和我一起思考!工作起来很有魅力!我将看到如何尽可能有效地使用它,并将在稍后的问题中发布。