Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Se constraints på en kolumn

Postades av 2005-02-21 16:00:30 - Marcus Gus, i forum sql-server/msde, Tråden har 3 Kommentarer och lästs av 778 personer

Hej

Nu har jag kört fast (eller inte egentligen men vill slippa skriva massor av SQL kod). Vad jag vill göra är att lista alla constraints som finns på en kolumn en i en tabell. Jag vet att man kan få ut alla constrains som går mot en tabell mha sp_helpconstraints, men i detta fallet så vet jag vilken tabell OCH kolumn jag vill få ut constraintsen för. Dvs jag vill enbart få de constraints som ligger på just den kolumnen.

Ett sätt som jag har påbörjat är att ta sp_helpconstraints och hacka om delar av den, men det blir det så jäkla mycket kod då så jag udrar om det fins ett smidigare sätt?


Svara

Sv: Se constraints på en kolumn

Postades av 2005-02-21 16:50:27 - Christoffer Hedgate

Hmm, nja, det är inte så enkelt som du märkt. Det beror ju också lite på exakt vad du vill ha ut. Om det finns en check-constraint som inbegriper den aktuella kolumnen, ska den listas då? Om kolumnen ingår i en composite key, ska denna isf listas?

Du kan slänga ett öga på sp_columns och se om den ger något kanske. Man ska helst undvika att basera funktionalitet på system-tabellerna, men du kan ju om du vill titta på sysconstraints. Den har information om vilken kolumn en constraint påverkar och sedan kan du från syscomments och sysreferences (plus kanske sysindexes etc) få ut information att visa. Alternativt kan du titta på INFORMATION_SCHEMA-vyerna, t ex CONSTRAINT_COLUMNS_USAGE, KEY_COLUMN_USAGE etc. I alla fall tror jag dock tyvärr att det innebär en del kodande, det finns inget färdigt att använda för att lista constraints för en kolumn vad jag vet.


Svara

Sv:Se constraints på en kolumn

Postades av 2005-02-22 09:28:42 - Marcus Gus

<code>
declare @TableName varchar(500)
declare @ColName varchar(500)
set @TableName = 'mintabell'
set @ColName = 'minkolumn'

declare @Tableid int
declare @i int
declare @cnstname sysname
declare @cnstid int
declare @cnsttype character(2)

set @Tableid = (select id from sysobjects where name = @TableName)


declare ms_crs_cnst cursor local static for
select id, xtype, name from sysobjects where parent_obj = @Tableid
and xtype in ('C ','PK','UQ','F ', 'D ')

create table #Tmp (ConstraintID sysname, cnsttype varchar(2))

open ms_crs_cnst
fetch ms_crs_cnst into @cnstid ,@cnsttype ,@cnstname
while @@fetch_status >= 0
begin
if @cnsttype in ('PK','UQ') -- Primärnycklar & unika constraints
begin
declare @Myname varchar(200)
select @Myname = index_col(@TableName, (select indid
from sysindexes
where name = object_name(@cnstid)
AND id = @Tableid),1)

if (@ColName = @Myname)
insert into #tmp values (@cnstname, @cnsttype)

set @i = 2
while @Myname is not null
begin
select @Myname = index_col(@TableName, (select indid
from sysindexes
where name = object_name(@cnstid)
and id = @Tableid), @i)
if (@ColName = @Myname)
insert into #tmp values (@cnstname, @cnsttype)

set @i = @i + 1
end
end
else
if @cnsttype = 'F ' -- Främmande nycklar
begin
declare @fkeyid int, @rkeyid int
select @fkeyid = fkeyid, @rkeyid = rkeyid from sysreferences where constid = @cnstid
declare @keys varchar(200)
declare ms_crs_fkey cursor local for select fkey, rkey from sysforeignkeys where constid = @cnstid
open ms_crs_fkey
declare @fkeycol smallint, @rkeycol smallint
fetch ms_crs_fkey into @fkeycol, @rkeycol
while @@fetch_status >= 0
begin
if ((select col_name(@fkeyid, @fkeycol)) = @ColName)
insert into #tmp values (@cnstname, @cnsttype)
fetch ms_crs_fkey into @fkeycol, @rkeycol
end
deallocate ms_crs_fkey
end
else
if (@cnsttype = 'C ') or (@cnsttype = 'D ') --checkconstraint & defaultconstraint
begin
if ((select col_name(@Tableid, (select info from sysobjects where id = @cnstid))) = @ColName)
insert into #tmp values (@cnstname, @cnsttype)
end

fetch ms_crs_cnst into @cnstid ,@cnsttype ,@cnstname
end
deallocate ms_crs_cnst
</code>

Löste det omedelbara behovet iaf. Tokful kod, men...


Svara

Sv: Se constraints på en kolumn

Postades av 2005-02-22 23:41:03 - Kalle Dahlberg

Tjena!

Här har du en annan variant. Intressant att namn på defaults inte existerar i INFORMATION_SCHEMA vyerna, så att man måste hämta från sysobjects...

<code>
declare @tablename sysname,
@columnname sysname

select @tablename = 'mytable', @columnname = 'mycolumn'

select tc.constraint_name,
tc.constraint_type
from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
ON CCU.CONSTRAINT_NAME=TC.CONSTRAINT_NAME
where CCU.table_name = @tablename
and CCU.column_name = @columnname
UNION ALL
select so.name,
'DEFAULT'
from sysobjects so
inner join
syscolumns sc
on sc.id=so.parent_obj
where sc.name = @columnname
and object_name(so.parent_obj) = @tablename
and so.xtype='D'

</code>


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
564
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies