Maskinistens Twitter-flöde  Stöd Maskinisten via Patreon  Maskinistens nätverk - information på svenska  Maskinistens nätverk - information på finska  Maskinistens nätverk - information på norska  Maskinistens nätverk - information på danska  Maskinistens nätverk - information på isländska
Forumindex

ForumindexForumindexMaskin-databasFotoalbumKalender-informationKöp & SäljDownloadsLexikonKontaktregisterMaskinistenin rikosrekisteri

Åkerman-register
Visa forum för mobila enheter

ForumindexDiverseSnick SnackDatorer/telefoner, hård- och mjukvara

C#

72 inlägg • Sida 3 av 5
Snacka datorer och telefoner i detta forum.

Ulf (trådstartaren)

#31 » 14:54:56, 02-02-2018
  • Överför markerat ord till lexikonet

Någonstans nere i enherrejössessubfråga:n så är min av typen bigint, not null och FK,
i mintabell är uid bigint, not null och PK.

Det som jag faktiskt tror ställer till det är att min enherrejössessubfråga är en rätt saftigt select och att FK så att säga "försvinner" på vägen. Men innehållet i enherrejössessubfråga har alltid en och endast en referens till mintabell. Sedan vid en inner join så ska de poster i enherrejössessubfråga som inte har min i mintabell tas bort, det är denna kontroll som ställer till det. I left outer join tas alla med, utan omsvep.
Men det gör inget, eftersom det alltid existerar exakt en rad i mintabell som matchar

Ska sägas att det är några år sedan frågan skrevs, men fenomenet är intressant.

När jag pluggade databaser för dryga 20 år sedan så hade kursledaren en förkärlek till tre nyckeltyper:
PK, FK och CK. Den senare, kandidatnyckeln är bekvämt att använda många gånger.
Han körde även med mängdlära, vilket fick mig att minnas matten i första klass och boken "Hej Matematik".
"Ringa in en mängd bananer. Ringa in en delmängd bananer som är inom delmängden apor och bananer."
Tur att jag var för gammal för Vilse i pannkakan...

Många designar ofta ett artikelregister med artikelnummer som PK, eller fakturor med fakturanummer.
Det som skiljer är att CK INTE ingår i relationen, tex:
Kod: Markera allt
artnr char(20), unique, PK

vs

uid bigint, unique, isIdentity, PK
artnr char(20), unique (CK)


I den senare så lever uid "sitt eget liv", utan att jag behöver bry mig.
Sedan går det snabbare att jämföra bigint:ar mot att jämföra strängar.
Jag har även uid som benämning på PK i ALLA tabeller. Detta för att inte bli förvirrad!
Kolumnen som är FK heter alltid <refererar till>Id, tex i fakturaraderna, FakturaId bigint FK.

Men nu är det bara att kämpa vidare, veckans sista skälvande minuter!
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61



Ulf (trådstartaren)

#32 » 15:31:57, 18-04-2018
  • Överför markerat ord till lexikonet

Som sagt på lärostadiet...

Bråkar lite med affärsobjekten och har nästan beslutat mig för BLL/Entity/DAL.
BLL (Business Logic Layer) sköter det mesta av logiken och validering.
DAL (Data Access Layer) sköter kommunikationen med databasen. Dessa är singleton, än så länge iaf.
Entity är ett slags transfer/repository -objekt.

Fungerar utmärkt för kund:
KundBLL har ett KundEntity, När KundBLL skapas med kundid så anropas KundDAL som skapar KundEntity. Allt fungerar väl.

Men hur är det med en order?
OrderBLL har ett OrderEntity osv, själva orderhuvudet, helt ok. Men orderraderna?
Ska OrderBLL ha en List<OrderradEntity> med en OrderradBll som är för alla i listan, eller hur ska (bör) man tänka där?
Ska det vara en List<OrderradBll>...?

Jag ser ju gärna att även förändringar på orderraderna sparas när jag sparar ordern, mm.

Huh...
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#33 » 15:39:48, 18-04-2018
  • Överför markerat ord till lexikonet

Å andra sidan så är det OrderDAL, och OrderBLL.
Inte OrderhuvudDAL och OrderhuvudBLL. Så OrderDAL borde ju då hantera raderna, eller?
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

JD400

#34 » 20:45:34, 18-04-2018
  • Överför markerat ord till lexikonet

Skriver du all din dataaccess kod själv eller använder du nån typ av ORM-ramverk typ Entity Framework? Hur pass komplicerad affärslogik har du eller rör det sig mest om rena CRUD operationer mot databasen?

Du säger att ditt Entity-objekt i princip är ett DTO-objekt, alltså ett objekt utan operationer som endast används för att skyffla data mellan olika lager i din applikation? Eller är det ett objekt motsvarande din databasentitet/tabell?

När det gäller ditt order objekt skulle nog jag betrakta det som "huvudobjektet" för ordern och se orderraderna som att de är helt beroende av order objektet för sin existens. Om det inte finns någon order kan det inte finnas nån orderrad. Därmed känns det inte heller relevant att en orderrad skulle hålla någon direkt egen affärslogik. Därför skulle jag skippa att ha något BLL objekt för orderraderna och låta BLL objektet för ordern innehålla operationer för att t.ex. beräkna ordersumma, beräkna eventuella rabatter eller vad det nu kan vara. BLL objektet för ordern håller då en lista med Entity-objekt. På samma sätt kan ordern hålla en referens till ett orderhuvud, om det nu ens behövs, om det inte kan ligga direkt i ordern.

KISS är alltid en bra grundregel: Keep It Simple. Den enklaste lösningen är oftast den bästa.
JD400
Fler än 500 inlägg
 
Blev medlem: 18:34:03, 08-10-2007
Ort: Dalarna
Maskintyp: Traktorgrävare
Maskin: JD400

Ulf (trådstartaren)

#35 » 09:23:54, 19-04-2018
  • Överför markerat ord till lexikonet

Först, tack för dina frågor och synpunkter JD400, de har fått mig att tänka till.
Då jag sitter ensam med detta har jag ingen att diskutera lösningar eller få förklaringar.
De andra här, lyssnar eller förstår inte när jag vill diskutera med dom (är ju inte deras jobb).
Samtidigt om de åtminstone lyssnar så jag får försöka förklara så att de nästan begriper så får jag en del svar på mina funderingar av mig själv, eller den tyvärr oftast föraktade "Dumma frågan"!


Skriver allt själv, jag är inte så förtjust i andras ramverk. Och lite självplågare...
Dessutom är jag ju ganska grön på c#, så jag behöver koda mycket för att lära mig.
Iofs, så är det bara ett annat språk, med sina bra och dåliga sidor liksom alla andra språk.
Programmering i sig handlar ju egentligen inte om språket, men man måste ta hänsyn till det ändå.
Jag har funderat lite över alla dom språk jag kodat i och det bökigaste var nog LISP och dess parenteser...

När någon totar ihop ett ramverk så är det lätt att vederbörande blir väldigt exalterad över sin i grunden snillrika idé. Det byggs på hejvilt och vips så är det inte så enkelt längre och då faller KISS!
Lägg till att någon börjar superfrossa i design patterns....

Entity-objekten är i stort rena DTO:er, det enda som de har just nu som extra är HasChanged.
Kanske någon beräknad property...

Jo, jag har kommit fram till att en OrderEntity innehåller en List<OrderradEntity>.
En separat OrderradDLL blir onödig, då det inte är så mycket operationer på den.
Skulle det behövas så går det ju med en Helper-klass eller i OrderBLL:en.

DAL:en, är inte CRUD, eller, ganska enkla ... För order finns tex GET_Order, SAVE_Order, Release_Order. Den senare heter just nu FRISLÄPP_Order, dvs skapa en faktura efter leveransförslags kolumnen i orderraderna, egentligen fylla faktura och fakturaraderna med rätt info.
Det kan vid frisläppning av en order hända något och jag vill inte ha för mycket kommunikation mellan applikation och databas. Så själva sqlsatsen blir
Kod: Markera allt
exec FRISLÄPP_order @orderid;


En del logik ligger i databasen, jag har tex, för orderhuvudet en spara procedur. Denna har koll på om orderhuvudet som ska sparas, har en PK, eller om denna är noll. Om noll, ett nytt orderhuvud, annars uppdatera. Detsamma gäller orderraderna, där finns bara spara-proceduren. Denna tar hänsyn till om antal, levererat antal osv. Om PK != 0 och levantal > 0 kan antal (beställt av kund) aldrig gå under levantal. Är PK!=0 och levantal=0 och antal=0 så raderas raden.

Sedan gjorde jag följande generella metod för att sätta värden i entity-objekten från databasen,
Dessutom TVINGAR den mig att kolumner returnerade från en fråga MÅSTE ha samma namn i entity -objektet! Vet dock inte hur mycket långsammare det blir med att använda Reflection...
Kod: Markera allt
private void PopulateEntity(IDataRecord reader, Object entity)
{
      Type myType = entity.GetType();

      for (int i = 0; i < reader.FieldCount; i++)
      {
            string pfield = reader.GetName(i);
            PropertyInfo pinfo = myType.GetProperty(pfield);
            Debug.Print(reader.GetName(i));
            //Debug.Print(pinfo.ToString());
            if (pinfo != null)
            {
                  // Use the SetValue method to change the caption.
                  if (!reader.IsDBNull(i))
                  {
                        pinfo.SetValue(entity, reader.GetValue(i), null);
                  }
                  else
                  {
                        Debug.Print("Value: NULL");
                  }
            }
      }
}


Från ett rörigt huvud fullstoppat med mycket nytt just nu!
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#36 » 09:32:11, 19-04-2018
  • Överför markerat ord till lexikonet

Ulf skrev:Entity-objekten är i stort rena DTO:er, det enda som de har just nu som extra är HasChanged.
Kanske någon beräknad property...


Det senare kommer troligtvis bara gälla radobjekt, annars görs detta i BLL....
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#37 » 14:02:13, 20-04-2018
  • Överför markerat ord till lexikonet

Det är sååå tråkigt att skriva Entity och DAL objekten.
Nu har jag gjort lite fiffiga metoder i en BasDAL som kollar argument och resultat innan ST anropas.

Detta ledde till att jag gjorde mig en liten generatorapplikation.
Den listar alla in och ut-data för en ST. I en textbox hamna även lite klasser.
Bara att klistra in i Entity och BLL! :cool:
SÅNT, gillar jag!
Kod: Markera allt
private void createInfo(string query, TextBox tb)
{
    if (!string.IsNullOrEmpty(ProcedureName.Text))
    {
        tb.Text = "";
        tb.AppendText(
        string.Format("Procedure {0}", query));
        tb.AppendText(Environment.NewLine);

        using (SqlConnection sqlConn =
            new SqlConnection(IdaSystem.DataAccess.DataConnection.Instance.Connectionstring))
        using (SqlCommand sqlCmd = new SqlCommand(query, sqlConn))
        {
            sqlConn.Open();
            sqlCmd.CommandType = CommandType.StoredProcedure;
            //string getset = @"{ get; set;}";
            string getsettempl = @"   public {0} {1} {{ get; set;}}";
            string classtempl = "public class {0}";

            SqlCommandBuilder.DeriveParameters(sqlCmd);
            Debug.Print("Number of parameters: {0}", sqlCmd.Parameters.Count.ToString());
            tb.AppendText("   Arguments:");
            tb.AppendText(Environment.NewLine);

            foreach (SqlParameter p in sqlCmd.Parameters)
            {
                tb.AppendText(
                    string.Format(
                        "      Parameter: {0},\t riktning: {1},\t Dtyp: {2}, c#typ: {3}",
                        p.ParameterName.ToString(),
                        p.Direction.ToString(),
                        p.SqlDbType.ToString(),
                        p.DbType.ToString()));
                tb.AppendText(Environment.NewLine);
            }

           tb.AppendText(Environment.NewLine);
           tb.AppendText(string.Format(classtempl, "ArgumentEntity"));
           tb.AppendText(Environment.NewLine);
           tb.AppendText(@"{");
           tb.AppendText(Environment.NewLine);

           foreach (SqlParameter p in sqlCmd.Parameters)
           {
               if (!p.ParameterName.ToString().Substring(1).Equals("RETURN_VALUE"))
               {
                   tb.AppendText(
                       string.Format(
                            getsettempl,
                            p.DbType.ToString(),
                            p.ParameterName.ToString().Substring(1)));

                    tb.AppendText(Environment.NewLine);

                    switch (p.DbType)
                    {
                        case DbType.Boolean:
                            p.Value = false;
                            break;
                        case DbType.String:
                            p.Value = "";
                            break;
                        case DbType.Int16:
                        case DbType.Int32:
                        case DbType.Int64:
                            p.Value = 0;
                            break;
                    }
                }
            }
            tb.AppendText(@"}");
            tb.AppendText(Environment.NewLine);
            tb.AppendText(Environment.NewLine);

            SqlDataReader reader = sqlCmd.ExecuteReader();

            tb.AppendText(string.Format(classtempl, "BLL"));
            tb.AppendText(Environment.NewLine);
            tb.AppendText(@"{");
            tb.AppendText(Environment.NewLine);

            for (int i = 0; i < reader.FieldCount; i++)
            {
                tb.AppendText(
                    string.Format(
                        getsettempl,
                        reader.GetFieldType(i).ToString().Replace("System.", ""),
                        reader.GetName(i)));
               tb.AppendText(Environment.NewLine);
           }

           tb.AppendText(@"}");
           tb.AppendText(Environment.NewLine);

           tb.AppendText(string.Format(classtempl, "DataEntity"));
           tb.AppendText(Environment.NewLine);
           tb.AppendText(Environment.NewLine);
           tb.AppendText(Environment.NewLine);
           tb.AppendText(@"{");
           tb.AppendText(Environment.NewLine);

           getsettempl = @"   public {0} {1} {{ get {{ return _data.{1}; }} set {{ _data.{1} = value; }} }}";

           for (int i = 0; i < reader.FieldCount; i++)
           {
               tb.AppendText(
                   string.Format(
                      getsettempl,
                      reader.GetFieldType(i).ToString().Replace("System.", ""),
                      reader.GetName(i)));
               tb.AppendText(Environment.NewLine);
           }

           tb.AppendText(@"}");
           tb.AppendText(Environment.NewLine);
       }
    }
}


Hophackat, men fungerar bra!
Kommer du med problem, eller är du en del av det?

2 personer gillar det här inlägget.
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#38 » 12:30:05, 24-04-2018
  • Överför markerat ord till lexikonet

Jag tänkte mig DAL som generiska för sin typ och singular, dvs en kundDAL servar alla kundBLL:er.
Så till det där med postlåsning...
I databasen finns sedan tidigare en hantering av postlåsningar.
Men då DAL:en servar flera kan inte den mer än hantera postlåsningen.
Men ska informationen om låsningen sparas i BLL:en eller i Entity?
Aftonbladet eller Expressen? I BLL:en så blir den (BLL) helt ansvarig för att sköta ALLT med postlåsningen. Den kan då inte lämna över sin Entity till en annan BLL, när den är låst. Och då låt den andra BLL:en sköta upplåsning, etc.

Men, att byta postlåsningsansvarig under låsning är troligen att be om problem...
Så därmed bestämt! En annan klass kan begära Entityn, men aldrig få postlåsningsansvaret!
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

JD400

#39 » 17:38:33, 24-04-2018
  • Överför markerat ord till lexikonet

Vad innebär postlåsningen mer exakt? Är det att användare A inte får modifiera samma post som användare B redan jobbar med, alltså en form av concurrency hantering? Hur har du tänkt implementera detta?

En approach är en form av optimistic concurrency control som man skulle kunna implementera med ett versionsnummer i databasen i varje tabell. När en skrivning görs så kontrollerar man att versionsnumret är samma som när läsningen gjordes. Om inte kastar man ett exception och rullar tillbaka transaktionen och användaren får ett felmeddelande om att posten har förändrats och måste läsas om. Är ju en enkel variant som dock kanske inte täcker dina behov. Fördelen är minimalt med logik som kan samlas på ett och samma ställe, där man hanterar skrivningar till databasen.
JD400
Fler än 500 inlägg
 
Blev medlem: 18:34:03, 08-10-2007
Ort: Dalarna
Maskintyp: Traktorgrävare
Maskin: JD400

Ulf (trådstartaren)

#40 » 23:31:00, 24-04-2018
  • Överför markerat ord till lexikonet

Nja, tex kundtabellen har en låstabell som håller reda på vem som låser vilken post. Det finns två typer av låsning, vanlig editering och anteckning. Två användare kan låsa varsin typ.
Låsningarna går inte direkt mot användaren, utan session.
En session per användare och dator. När en session tas bort försvinner alla kvarvarande låsningar. Vid krasch när programmet startas igen.
Sessionen har en användare så att användare kan överta en session. Fungerar utmärkt i det gamla systemet.

Och det verkar fungera i det nya.
Lite funderande och pill blev det.
Men konceptet verkar fungera bra (bll/entity/dal). Dal sköter postlåsningen med beröm!
För order är det bara huvudet som blir låst och endast en typ där.
Men konceptet minskade koden oerhört!!
Knöligare kanske men lättläst!

Framgent så kommer den jobbiga koden att genereras!
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#41 » 23:42:56, 24-04-2018
  • Överför markerat ord till lexikonet

Jo, artiklar har editering och anteckning, precis som kunder.
Men, saldon justeras alltid batchvis. Tex frisläppning av order, eller lager justering.
Det senare var för att få kontroll, tex en användare börjar ändra och går på skithuset eller åker iväg. Det finns även en timer för inaktiv editering.
Jo, orsakerna HAR inträffat!!
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#42 » 15:40:16, 25-04-2018
  • Överför markerat ord till lexikonet

F-n, jag börjar nästan gilla C#....

Jag har i min basDal en metod, ExecuteProcedure( string procname, basEntity be) som jag upptäck att den är väldigt generisk.
Den går först ut och kollar vilka parametrar som SP vill ha i databasen.
Sen används Reflection för att krama ur dess ur medskickad Entity. Frågan körs och mha Reflektion och kolumn-namn i resultatet sätts rätt värden i Entityn.

Jag gruvade mig och skriva koden när det ska sparas, MEN, Det är bara att skicka med ett annat procname till metoden.
Primärnyckeln för kund, kundid är 0 (noll) för en ny kund så:
Kod: Markera allt
create procedure [dbo].[UpdateKund]
(
   @Kundid bigint,
   ...)
AS
IF(@Kundid = 0)
BEGIN
   Insert into
      Kund(...)
      VALUES(...);
   
   select @kundid = scope_identity()
END
ELSE
BEGIN
   Update Kund
      SET
         ...
   WHERE
      uid = @Kundid;
end

select @Kundid as Kundid


tillbaks får jag alltid ett kundid, nytt eller gammalt :hurra: som sätts i entityn!!!!
Ska jag ändra en anteckning så är det kundid och anteckningen som är argumentet till den proceduren!

Nöööjd med dagen snart dags att hämta Lilla M!
Kommer du med problem, eller är du en del av det?

1 person gillar det här inlägget.
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#43 » 15:37:33, 08-06-2018
  • Överför markerat ord till lexikonet

Så dåså, jag har ju hört talas om helper-funktioner/classer...
Nu ska jag använda resten av dagen till att förstå hur det funkar...
Det verkar ju onekligen vara rätt användbart!

Jag har bråkat med DataGridView, trevlig när man bara ska visa data i en tabell, men ska man göra lite mer avancerad editering...
Tex CurrentRow returnerar en DataGridViewRow, funkar utmärkt när man klickar, utom när man har fullrowselect vald, då släpar den ett hack! Och markerar man en rad mha
Kod: Markera allt
grid.Rows[i].Selected = true
då är det samma visa. Detta torde vara det mest logiska sättet att växla rad!
Hittade ytterst lite om detta, man ska välja en cell, så
Kod: Markera allt
grid.Rows[i].Cells[0].Selected = true;
funkar.
Det sa dom inget om i reklamen...
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#44 » 15:13:34, 06-07-2018
  • Överför markerat ord till lexikonet

Och nu! Generera pdf....
Började med PrintDocument, lite stökig innan man kommer på hur den fungerar.
Det finns i princip bara i grunden två olika exempel på nätet.
Det ena skriver ut rader mellan ett sidhuvud och en sidfot.,
Ett problem bara, alla rader är lika stora, det har inte jag....

Det andra läser in en textfil och skriver ut den i en kolumn...

Löstes genom att "skriva ut" en första omgång och hålla reda på vilken rad jag är på i Render-mode.
Sedan sker den den riktiga utskriften.

Strukturen på koden blev rätt enkel, och jag har blivit stört kär i Extension...

Så kom då nästa problem, jag vill skriva ut pdf, med font-information, dvs alla fonter är riktiga fonter och inte vektorgrafik.
Valet föll på Pdf Sharp, för att de är ganska lika.

Problem #1, Den har en egen "Graphics"-klass, XGraphics, troligen för att Graphics från System.Darawing är statisk och det går inte att ärva från den.

Problem #2, jag vill ha själva layouten för det jag ska skriva ut i en separat klass.
Kanske är parameteriserad klass bra här... Om jag gjort den för det ena så ska det enkelt fungera på den andra, sas.

Ja, ja, jag har snart hela semestern på mig att fundera...
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf (trådstartaren)

#45 » 14:29:53, 30-08-2018
  • Överför markerat ord till lexikonet

Mer fundering, men nu runt SQL...

Avrundningar, dessa D-A avrundningar!!! :svettas:
Nu är detta bara en liten del av en större fråga!
Jag har en funktion som beräknar en sak, utdata är av typen numeric(15,5)
och använder den:
Kod: Markera allt
declare @result numeric(15,2);

SELECT
      @result = sum(dbo.minfunc(t.tal1, t,tal2))
   from
      mytable

Ger ett resultat som i sig behöver avrundas för att kunna bli rätt så jag testade
Kod: Markera allt
declare @result numeric(15,2);

SELECT
      @result = sum(round(dbo.minfunc(t.tal1, t,tal2), 2))
   from
      mytable

Blev inte heller bra. :klia:
MEN
Kod: Markera allt
declare @result numeric(15,5);

SELECT
      @result = sum(CAST(dbo.minfunc(t.tal1, t,tal2) as numeric(11,2)))
   from
      mytable

verkar fungera ypperligt. Jag tycker de två senare borde vara likvärdig, men icke!!! :klia:

Någon SQL-guru som har en idé :idee3: om varför?
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61


Återgå till Datorer/telefoner, hård- och mjukvara

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 0 gäster



Älmeboda Maskinservice

OilQuick

TK Traktordelar

Klaravik

Crazyride

Bra Verktyg

Motrab

Engcon

Scandcut

Astrak

Olsson Parts

Nya och begagnade
truckar på vstruck.se