Jag har en tabel i en MS SQL databas med några kolumner vars jag vill ta reda på hur lång textlängden är på. Hur gör man? Hej Magnus, Tack Börje! Underbar info som jag hittat. Snickarde ihop en liten SP av det. Kika på information schema, vilket är ansi SQL standard: Hej Andreas! Magnus, Testa igen. Den betyder att textsträngen tolkas som nvarchar (unicode), eftersom det är datatypen på kolumnen.Hur erhålla kolumn egenskap i en SQL server tabell?
Sv: Hur erhålla kolumn egenskap i en SQL server tabell?
Du kan använda en inbyggd lagrad procedur för att lista egenskaper per fält i varje tabell. Kommandot heter sp_help följt av ett tabellnamn.
Ex: sp_help TabellNamn
Du kan ocks använda en annan för att se innehållet i en sp:
Ex: sp_helptext spnamn
Exempel på sp_help TabellNamn
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
backup_set_id int no 4 10 0 no (n/a) (n/a) NULL
first_family_number tinyint no 1 3 0 yes (n/a) (n/a) NULL
first_media_number smallint no 2 5 0 yes (n/a) (n/a) NULL
filegroup_name nvarchar no 256 yes (n/a) (n/a) Finnish_Swedish_CI_AS
page_size int no 4 10 0 yes (n/a) (n/a) NULL
file_number numeric no 9 10 0 no (n/a) (n/a) NULL
backed_up_page_count numeric no 9 10 0 yes (n/a) (n/a) NULL
file_type char no 1 yes no yes Finnish_Swedish_CI_ASSv:Hur erhålla kolumn egenskap i en SQL server tabell?
Hej Pelle!
Tack för tipset. Men har en följdfråga.
Hur kommer jag åt det i .net?
MVH
MagnusSv: Hur erhålla kolumn egenskap i en SQL server tabell?
<code>
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_tabellinfo]
@tabell varchar(50)
AS
DECLARE @id int;
BEGIN
SET NOCOUNT ON;
SET @id = (select id from sysobjects where xtype = 'U' and name = @tabell);
select name, length, type from syscolumns where id = @id
END
</code>
Frågan kanske är hur gångbart ovan sätt är. Jag kör SQL server 2005. Kommer det att fungera i 2008 eller mySQL om jag byter databas?Sv:Hur erhålla kolumn egenskap i en SQL server tabell?
http://en.wikipedia.org/wiki/Information_schema
SELECT CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Din tabell' AND COLUMN_NAME = 'Din kolumn'
Sv: Hur erhålla kolumn egenskap i en SQL server tabell?
Jag testade
SELECT CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Min tabell' AND COLUMN_NAME = 'Min kolumn'
Men det kom inte upp något svar.
Sv:Hur erhålla kolumn egenskap i en SQL server tabell?
Ett tips:
Döp aldrig en sp med inledande "sp_" - det är ett känt prestandasänkande sätt. SQL tror att det är en inbyggd procedur och går först mot masterdatabasen för att köra sp:n, sen till den databas du är kopplad mot. Så, sluta döp era sp:ar med sp_ ...Sv:Hur erhålla kolumn egenskap i en SQL server tabell?
Du får bara träff på CHARACTER_MAXIMUM_LENGTH om datatypen är av char/varchar
<code>
SELECT
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Din tabell' AND COLUMN_NAME = N'Din kolumn';
</code> Sv: Hur erhålla kolumn egenskap i en SQL server tabell?
"N":et före 'Din tabell, vad gör den?
Om jag "hårdkodar" N'kunder' så funkar det. Men inte N@tabell...Sv:Hur erhålla kolumn egenskap i en SQL server tabell?
Kan inte sättas före en variabel.
Deklarera variabeln/inparametern som nvarchar istället.
<code>
DECLARE @table nvarchar(125);
DECLARE @column nvarchar(125);
SET @table = N'Din tabell';
SET @column = N'Din kolumn';
SELECT
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table AND COLUMN_NAME = @column;
</code>