Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Computed default value

2 views
Skip to first unread message

Leif Neland

unread,
Dec 17, 2012, 3:38:25 AM12/17/12
to
tsql, MSsqlserver 2008R2

I forbindelse med mit seo-halløj:
Jeg vil gerne have defaultværdien af feltet seourl til at være den
beregnede værdi '?katid='+cat(id as nvarchar(8))

Men feltet får bare teksten "'?katid='+cat(id as nvarchar(8))"

Kan jeg ikke få en beregnet værdi som default?

Leif

--
Husk kørelys bagpå, hvis din bilfabrikant har taget den idiotiske
beslutning at undlade det.


Leif Neland

unread,
Dec 17, 2012, 7:36:45 AM12/17/12
to
Efter mange tanker skrev Leif Neland:
> tsql, MSsqlserver 2008R2
>
> I forbindelse med mit seo-halløj:
> Jeg vil gerne have defaultværdien af feltet seourl til at være den beregnede
> værdi '?katid='+cat(id as nvarchar(8))
>
> Men feltet får bare teksten "'?katid='+cat(id as nvarchar(8))"
>
> Kan jeg ikke få en beregnet værdi som default?
>
Det ser ikke sådan ud.

Jeg prøver med en udf:

alter table t_produkter add constraint cn_seourl default
(dbo.newSeoUrl(id,titel)) for seourl

Msg 128, Level 15, State 1, Line 1
The name "id" is not permitted in this context. Valid expressions are
constants, constant expressions, and (in some contexts) variables.
Column names are not permitted.

Så jeg må prøve med en trigger i stedet.

Jeg mener ikke der bruges at indsætte flere rækker på een gang, hvilket
skulle kunne give problemer med det unikke index, fordi triggeren først
udløses når alle rækker er udført, ikke een gang for hver gang der
indsættes en række. Jeg formoder fordi en multirække-insert er atomisk.

Arne Vajhøj

unread,
Dec 17, 2012, 6:54:55 PM12/17/12
to
On 12/17/2012 3:38 AM, Leif Neland wrote:
> tsql, MSsqlserver 2008R2
>
> I forbindelse med mit seo-halløj:
> Jeg vil gerne have defaultværdien af feltet seourl til at være den
> beregnede værdi '?katid='+cat(id as nvarchar(8))
>
> Men feltet får bare teksten "'?katid='+cat(id as nvarchar(8))"
>
> Kan jeg ikke få en beregnet værdi som default?

http://msdn.microsoft.com/en-us/library/ms174979%28v=sql.105%29.aspx

siger:

DEFAULT

Specifies the value provided for the column when a value is not
explicitly supplied during an insert. DEFAULT definitions can be applied
to any columns except those defined as timestamp, or those with the
IDENTITY property. If a default value is specified for a user-defined
type column, the type should support an implicit conversion from
constant_expression to the user-defined type. DEFAULT definitions are
removed when the table is dropped. Only a constant value, such as a
character string; a scalar function (either a system, user-defined, or
CLR function); or NULL can be used as a default. To maintain
compatibility with earlier versions of SQL Server, a constraint name can
be assigned to a DEFAULT.

så nej.

INSERT + UPDATE trigger burde kunne goere det.

Men var det ikke bedre at goere det i applikationen fremfor
i databasen??

Arne

Leif Neland

unread,
Dec 18, 2012, 1:25:09 AM12/18/12
to
Arne Vajhøj tastede følgende:

>
> INSERT + UPDATE trigger burde kunne goere det.

Ja, det kunne det. Med forhindringer...
>
> Men var det ikke bedre at goere det i applikationen fremfor
> i databasen??
>
Jeg er begyndt at kunne lide at lægge ting i databasen, når der er
ting, der skal kunne tilgås på flere måder.

I dette tilfælde hvor der skal gøres noget, når der oprettes en vare.
Det kan ske manuelt, via et script der læser XML fra leverandør A, et
andet der læser csv fra leveranør B og nogle gange webscraping fra
andre leverandører.

Når algoritmen for generering af dette felt ændrer sig, skal det kun
ændres eet sted.

Arne Vajhøj

unread,
Dec 18, 2012, 6:38:13 PM12/18/12
to
On 12/18/2012 1:25 AM, Leif Neland wrote:
> Arne Vajhøj tastede følgende:
>> INSERT + UPDATE trigger burde kunne goere det.
>
> Ja, det kunne det. Med forhindringer...
>>
>> Men var det ikke bedre at goere det i applikationen fremfor
>> i databasen??
>>
> Jeg er begyndt at kunne lide at lægge ting i databasen, når der er ting,
> der skal kunne tilgås på flere måder.
>
> I dette tilfælde hvor der skal gøres noget, når der oprettes en vare.
> Det kan ske manuelt, via et script der læser XML fra leverandør A, et
> andet der læser csv fra leveranør B og nogle gange webscraping fra andre
> leverandører.
>
> Når algoritmen for generering af dette felt ændrer sig, skal det kun
> ændres eet sted.

Det afgørende er vel om alle tilgangene sker via samme
database lag.

Hvis alt bruger den samme kode i dal.dll/dal.jar/dal.php.
så er det ikke et problem.

Har du kode i C#, Java og PHP så er det et problem. Og så
begynder logik i databasen at virke mere attraktiv.

Arne


Leif Neland

unread,
Dec 19, 2012, 6:30:28 AM12/19/12
to
Arne Vajhøj formulerede spørgsmålet:
Jeg har netop både php og asp til at tilgå databasen.

Arne Vajhøj

unread,
Dec 19, 2012, 7:16:11 PM12/19/12
to
Så giver det jo mening.

Har du overvejet at skifte fra TSQL SP og triggers til
CLR SP og triggers?

Hvis det du skal lave er business logic og ikke queries, så
kan C# kode være pænere end TSQL.

Arne

0 new messages