日期:2014-05-17  浏览次数:20482 次

关于不才用列名查询的问题
一般写查询如下:
select a,b,c from T
a,b,c是T表的列名
那么如果不用列名呢?改用什么

------解决方案--------------------
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT  @s = @s + ',' + 'isnull('+QUOTENAME(name)+','''')'
FROM    syscolumns
WHERE   id = OBJECT_ID('表名')
        --AND name NOT IN ( '不希望显式的列' )
SET @s = STUFF(@s, 1, 1, '')
EXEC('select '+@s+' from 表名  ')
------解决方案--------------------
引用:
比如:
select a.aa,a.bb,b.aa.b.bb from T1 a
left join 
T2 b
on a.aa=b.aa

其中aa,bb 是两个表中列名
由于表设计的时候 字段bb写成半角的外文字符,所以在代码窗口中显示'?'  
所以想不用表的字段名称,那么用什么方法?
如果列名本身为乱码,就用[]包住,如果数据为乱码,那就只能改数据类型并重新导入
------解决方案--------------------
直接像SELECT b.bb AS customname ……这样不行么?这样输出的列名就是as后面的那个了
------解决方案--------------------
引用:
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT  @s = @s + ',' + 'isnull('+QUOTENAME(name)+','''')'
FROM    syscolumns
WHERE   id = OBJECT_ID('表名')
        --AND name NOT IN ( '不希望显式的列' )
SET @s = STUFF(@s, 1, 1, '')
EXEC('select '+@s+' from 表名  ')
我估计楼主的意思是不是只知道表名,不清楚字段名的情况下去查询表的字段信息?但是知道表名的话,没有特殊权限限制没有必要这么写啊。