DECLARE @sql NVARCHAR(4000);
SELECT @sql = 'SELECT TOP 100 ';
SELECT @sql += STUFF((SELECT ',' + c.name
FROM
sys.tables t
INNER JOIN sys.columns c ON c.object_id = t.object_id
INNER JOIN sys.schemas s ON s.schema_id = t.schema_id
INNER JOIN sys.types ty ON ty.system_type_id = c.system_type_id
WHERE
s.name = 'dbo'
AND t.name = 'locations'
AND ty.name != 'image'
FOR XML PATH('')), 1, 1, '');
SELECT @sql += ' FROM dbo.locations';
EXEC sp_executesql @sql;
select cast(N'select ' as nvarchar(max)) +
STRING_AGG(cast(N'[' + column_name + ']' as nvarchar(max)), ',') within group (order by ordinal_position) +
cast(' from [' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']' as nvarchar(max))
from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'Locations' and TABLE_SCHEMA = 'dbo' and DATA_TYPE not in ('image')
group by TABLE_SCHEMA, TABLE_NAME
3条答案
按热度按时间zvms9eto1#
如果您还没有使用sql server 2017或更高版本,那么您可以使用传统的方法:
wbrvyc0a2#
您需要根据信息模式生成查询。你可以这样做:
然后执行生成的查询。由于使用了字符串\u agg,这将从sql server 2017开始工作
nzk0hqpo3#
如果不需要权限列,则可以在查询中写入列名,而不是“star”,例如:select locationid,parentid,….from dbo.locations
或
您可以使用这种方法从除one:-
将所有数据插入临时表,然后从临时表中删除您不需要的列从临时表中获取数据(这将不包含删除列的数据)删除临时表如下所示:
从表名中选择进入#临时表
更改要删除的表#临时表下拉列
从临时表中选择
放置表格#临时表格