sql server—选择sql中除特定数据类型(如图像)以外的所有列

hlswsv35  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(194)

嗨,我想查看除数据类型为图像的列以外的所有列。例如。下面是我的表的信息模式。

所以从技术上讲,我想删除datatype=image的列,这是我的表视图的“权限”。所需的代码应该是这样的。

select * from dbo.Locations where Data_Type isnot image
zvms9eto

zvms9eto1#

如果您还没有使用sql server 2017或更高版本,那么您可以使用传统的方法:

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;
wbrvyc0a

wbrvyc0a2#

您需要根据信息模式生成查询。你可以这样做:

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

然后执行生成的查询。由于使用了字符串\u agg,这将从sql server 2017开始工作

nzk0hqpo

nzk0hqpo3#

如果不需要权限列,则可以在查询中写入列名,而不是“star”,例如:select locationid,parentid,….from dbo.locations

您可以使用这种方法从除one:-
将所有数据插入临时表,然后从临时表中删除您不需要的列从临时表中获取数据(这将不包含删除列的数据)删除临时表如下所示:
从表名中选择进入#临时表
更改要删除的表#临时表下拉列
从临时表中选择

放置表格#临时表格

相关问题