PDA

View Full Version : بدست آوردن نوع فیلد



Hossis
شنبه 22 شهریور 1393, 09:36 صبح
من به وسیله کد های زیر، نام جداول و نام فیلدهای هر جدول رو بدست می آرم
select * from sys.tables
select * from sys.columns where object_id in (select object_id from sys.tables where name ='" & tblName & "')"

با این روش نام هر فیلد بدست میاد، نوع هر فیلد هم به صورت شماره به دست می یاد ولی می خوام که به صورت متنی باشه مثلا (nvarchar)
آیا راهی برای این کار هست؟

ham3d1988
شنبه 22 شهریور 1393, 09:57 صبح
سلام
با این کوئری میتونید


select
*,
(select systypes.name from systypes where systypes.xusertype = syscolumns.xusertype) as Fieldtype
from syscolumns where id =object_id ('YourTbl')

cherchil_hra
دوشنبه 24 شهریور 1393, 08:36 صبح
من به وسیله کد های زیر، نام جداول و نام فیلدهای هر جدول رو بدست می آرم
select * from sys.tables
select * from sys.columns where object_id in (select object_id from sys.tables where name ='" & tblName & "')"

با این روش نام هر فیلد بدست میاد، نوع هر فیلد هم به صورت شماره به دست می یاد ولی می خوام که به صورت متنی باشه مثلا (nvarchar)
آیا راهی برای این کار هست؟

می توانید از کوئری های زیر استفاده کنید:
DECLARE @TableName VARCHAR(150)
SET @TableName='MyTable'

--------------------------------------------- Q 1 - Query cost 58%

SELECT --t.TABLE_SCHEMA,
--t.TABLE_NAME,
c.COLUMN_NAME,
c.ORDINAL_POSITION,
c.DATA_TYPE
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.[COLUMNS] c
ON t.TABLE_SCHEMA = c.TABLE_SCHEMA
AND t.TABLE_NAME = c.TABLE_NAME
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND c.TABLE_NAME = @TableName

--------------------------------------------- Q 2 - Query cost 42%

SELECT --SCHEMA_NAME([obj].[schema_id]) AS TABLE_SCHEMA,
--[obj].name AS TABLE_NAME,
c.name AS COLUMN_NAME,
c.column_id AS ORDINALPOSITION,
st.name AS DATA_TYPE
FROM sys.objects [obj]
INNER JOIN sys.[columns] c
ON [obj].[object_id] = c.[object_id]
INNER JOIN sys.systypes st
ON st.xtype = c.system_type_id
AND st.xusertype = c.user_type_id
WHERE [obj].[type] = 'U'
AND obj.name = @TableName

که کوئری دوم هزینه کمتری (استفاده از CPU و IO) نسبت به کوئری اول دارد.
البته می تونی شرط t.TABLE_TYPE = 'BASE TABLE را حذف کنید.
موفق باشید!

Hossis
سه شنبه 25 شهریور 1393, 11:13 صبح
ممنون حل شد