我有这段代码:
select a.id as tableid,
a.name as tableName,
b.name as columnName,
b.status as columnStatus,
b.type as columnType
from sysobjects a
LEFT JOIN syscolumns b
ON a.id = b.id
WHERE a.name = 'table_name'
现在,columType显示数字。我想获取columnType的名称,该名称位于表'systypes'中的'name'列中。我怎么做?简单的LEFT JOIN将导致重复的行。
答案 0 :(得分:10)
我在Sybase 15.0中看到过,这是您必须使用的代码:
select o.id [tableid], o.name [tableName], c.name [columnName], c.status [columnStatus], t.name [columnType] from sysobjects o
inner join syscolumns c on c.id = o.id
inner join systypes t on t.usertype = c.usertype
where o.type = 'U' and o.name in ('tablename')
答案 1 :(得分:3)
select o.id [tableid], o.name [tableName],
c.name [columnName], c.status [columnStatus],
t.name [columnType] from sysobjects o
inner join syscolumns c on c.id = o.id
inner join systypes t on t.type = c.type
where o.type = 'U' and o.name = 'table_name'
and t.name not in ('sysname', 'nid', 'uid', 'nvarchar', 'tid', 'nchar')
我从@aF添加最后一行。码。我不知道怎么解释这个。我从这里得到了这个答案:http://www.dbforums.com/sybase/913004-getting-column-type.html#post3355703
答案 2 :(得分:2)
有必要加入type
和 usertype
:
SELECT
o.id AS tableID,
o.name AS tableName,
c.name AS columnName,
c.status AS columnStatus,
t.name AS typeName
FROM syscolumns AS c NOLOCK
INNER JOIN systypes AS t NOLOCK
ON c.type = t.type
AND c.usertype = t.usertype
INNER JOIN sysobjects AS o NOLOCK
ON c.id = o.id
INNER JOIN sysusers AS u NOLOCK
ON o.uid = u.uid
WHERE o.name = 'table_name'
AND u.name = 'dbo'
答案 3 :(得分:0)
create function dbo.GetColumnDataTypeName(@TableName TName, @ColumnName TName)
returns sysname
as
begin
declare @typeName sysname,
@tableId int = object_id(@TableName)
select
@typeName = type_name(user_type_id)
from sys.columns sc
where sc.[object_id] = @tableId
and sc.Name = @ColumnName
return @typeName
end
Go
答案 4 :(得分:0)
select so.name as table_name, '' as table_description,sc.name as fileld_name,'' as field_description,
st.name as format,
sc.length as data_length,sc.prec as decimal_places,'' as primary_key,
case when sc.status = 8 then 'Y'
else 'N'
end as nulls
from syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
inner join systypes st on sc.type = st.type
WHERE so.name in (/*table list*/)
and st.name not in ('sysname', 'nid', 'uid', 'nvarchar', 'tid', 'nchar','longsysname','usr_char')
order by so.name
go