如何获取某一个表的所有字段?语句怎么写额!!

tianyazaixian 2011-07-30 11:08:42
获取一个数据库里的所有表
use test
select table_name
from infomartion_schema.tables
where table_type='base table'
可以执行
获取一个表中的所有字段
select *
from syscolumns
where id=object_id('t')
可以执行
现在我想通过这两条语句一起查看为什么提示错误哈

select name from syscolumns
where id=object_id
('(select top 1 * from
(select table_name from information_schema.tables where
table_type='base table'))')

提示:服务器: 消息 170,级别 15,状态 1,行 13
第 13 行: 't' 附近有语法错误。
谢谢哈
[color=#FF0000]
[/color]
...全文
175 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2011-08-01
  • 打赏
  • 举报
回复

sp_mshelpcolumns [TableName]
tianyazaixian 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chuanzhang5687 的回复:]

SQL code
exec sp_columns 'table_name '
[/Quote]

谢谢哈。。。。要是通过语句获得表(语句)就好了
tianyazaixian 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 claro 的回复:]

按您的逻辑

SQL code

select OBJECT_NAME(id) 表名,name 列名
from syscolumns
where id > 100
and OBJECT_NAME(id) ='t'
[/Quote]

你这个ID是怎么来的,可以告知一下吗?我是想通过语句获得T
tianyazaixian 2011-08-01
  • 打赏
  • 举报
回复
可能是我没有说明白,我现在是想通过语句获得这个‘T’(不是我指定的),谢谢。。。
勿勿 2011-08-01
  • 打赏
  • 举报
回复
select name from syscolumns where .....

想要什么自己加进去。。
--小F-- 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tianyazaixian 的回复:]
引用 3 楼 chuanzhang5687 的回复:

SQL code
exec sp_columns 'table_name '


谢谢哈。。。。要是通过语句获得表(语句)就好了
[/Quote]

--将表数据生成SQL脚本的存储过程

CREATE PROCEDURE dbo.UspOutputData
@tablename sysname
AS
declare @column varchar(1000)
declare @columndata varchar(1000)
declare @sql varchar(4000)
declare @xtype tinyint
declare @name sysname
declare @objectId int
declare @objectname sysname
declare @ident int

set nocount on
set @objectId=object_id(@tablename)

if @objectId is null -- 判断对象是否存在
begin
print 'The object not exists'
return
end
set @objectname=rtrim(object_name(@objectId))

if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
begin
print 'object not in current database'
return
end

if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是table
begin
print 'The object is not table'
return
end

select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80

if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' ON'

declare syscolumns_cursor cursor

for select c.name,c.xtype from syscolumns c where c.id=@objectid order by c.colid

open syscolumns_cursor
set @column=''
set @columndata=''
fetch next from syscolumns_cursor into @name,@xtype

while @@fetch_status < >-1
begin
if @@fetch_status < >-2
begin
if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理

begin
set @column=@column+case when len(@column)=0 then'' else ','end+@name

set @columndata=@columndata+case when len(@columndata)=0 then '' else ','','','
end

+case when @xtype in(167,175) then '''''''''+'+@name+'+''''''''' --varchar,char
when @xtype in(231,239) then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar
when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime
when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime
when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier
else @name end

end

end

fetch next from syscolumns_cursor into @name,@xtype

end

close syscolumns_cursor
deallocate syscolumns_cursor

set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from '+@tablename

print '--'+@sql
exec(@sql)

if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' OFF'

GO

exec UspOutputData 你的表名

claro 2011-07-30
  • 打赏
  • 举报
回复
按您的逻辑


select OBJECT_NAME(id) 表名,name 列名
from syscolumns
where id > 100
and OBJECT_NAME(id) ='t'
-晴天 2011-07-30
  • 打赏
  • 举报
回复
如果要获取指定表名的所有列,只需要:
select name from syscolumns 
where id=object_id('t')

为什么要再加上另一条语句呢?
-晴天 2011-07-30
  • 打赏
  • 举报
回复
楼主的提问标题与提问内容有差异.
如果想得到所有表的所有列:
select a.name as columnname,b.name as tablename from syscolumns a inner join sysobjects b on a.id=b.id and b.xtype='U'
chuanzhang5687 2011-07-30
  • 打赏
  • 举报
回复
exec   sp_columns   'table_name ' 

chuanzhang5687 2011-07-30
  • 打赏
  • 举报
回复
select name from syscolumns where id=object_id('表名')
一缕青烟 2011-07-30
  • 打赏
  • 举报
回复


select name from syscolumns
where id=object_id
('(select top 1 * from (select table_name from information_schema.tables where table_type="base table") a)')

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧