Avatar billede _et Praktikant
03. juli 2005 - 21:48 Der er 12 kommentarer og
1 løsning

Kan man lave en IF i en query?

Jeg ønsker at hente noget fra databasen, men hvis der ikke retuneres noget, skal der så returners et enkelt felt med teksten "Intet"

Hvordan gøres det. - Kan det gøres med en query?
Avatar billede arne_v Ekspert
03. juli 2005 - 21:51 #1
du kan ikke gøre det på rækker

men på felt værdier kan du godt gøre det

SELECT ISNULL(felt,'Værdien var NULL') FROM tabel
Avatar billede _et Praktikant
03. juli 2005 - 22:14 #2
ok.

Man kan hellerikke lave noget med stored procedures?
Avatar billede arne_v Ekspert
03. juli 2005 - 22:21 #3
jo

du kan vel altid lave en

DECLARE @n INTEGER
SET @n = (SELECT COUNT(*) FROM tabel WHERE bla bla)
IF @n > 0
BEGIN
    SELECT felt FROM tabel WHERE bla bla
END
ELSE
BEGIN
    SELECT 'ha ha der er ingen rækker'
END

men var det ikke nemmere at lave det i din applikation ??
Avatar billede _et Praktikant
03. juli 2005 - 22:25 #4
jov det kan du have ret i. Men jeg kunne ikke lige finde den proberty der viser antallet af rækker i et dataset, of så har jeg ofte haft lyst til at iffe i en query.
Men dette ser spændende ud - kom med et svar.
Avatar billede arne_v Ekspert
03. juli 2005 - 22:27 #5
ok
Avatar billede _et Praktikant
03. juli 2005 - 22:30 #6
sidste ting. Kan man sende en var med fra client til stored pro...
Avatar billede arne_v Ekspert
03. juli 2005 - 22:32 #7
ja da

hvilket sprog og hvilket database API ?
Avatar billede _et Praktikant
03. juli 2005 - 22:35 #8
C# og sqlconnection i VS hvad den så bruger
Avatar billede arne_v Ekspert
03. juli 2005 - 22:39 #9
jeg poster et eksempel
Avatar billede arne_v Ekspert
03. juli 2005 - 22:39 #10
using System;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("TEST_OUTRSRET", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlParameter prm = new SqlParameter("@outarg", SqlDbType.Int, 0, "outarg");
        prm.Direction = ParameterDirection.Output;
        cmd.Parameters.Add(prm);
        SqlParameter ret = new SqlParameter("@retval", SqlDbType.Int);
        ret.Direction = ParameterDirection.ReturnValue;
        cmd.Parameters.Add(ret);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.Close();
        Console.WriteLine((int)cmd.Parameters["@outarg"].Value);
        Console.WriteLine((int)cmd.Parameters["@retval"].Value);
        con.Close();
    }
}
Avatar billede arne_v Ekspert
03. juli 2005 - 22:39 #11
CREATE PROCEDURE TEST_OUTRSRET
@outarg INTEGER OUTPUT
AS
SELECT @outarg = 123
SELECT * FROM T1
RETURN 456
GO
Avatar billede arne_v Ekspert
03. juli 2005 - 22:41 #12
øv - dårligt eksempel - det var en out arg

her kommer en in arg:

using System;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=master");
        con.Open();
        SqlCommand cmd = new SqlCommand("sp_databases", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string dbnam = (string)rdr[0];
            Console.WriteLine("Database=" + dbnam);
            SqlConnection con2 = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=" + dbnam);
            con2.Open();
            SqlCommand cmd2 = new SqlCommand("sp_tables", con2);
            cmd2.CommandType = CommandType.StoredProcedure;
            cmd2.Parameters.Add("@table_type", "'TABLE'");
            SqlDataReader rdr2 = cmd2.ExecuteReader();
            while(rdr2.Read()) {
                string tblnam = (string)rdr2[2];
                Console.WriteLine(dbnam + " " + tblnam);
            }
            con2.Close();
        }
        con.Close();
    }
}

du skal ned til sp_tables kaldet
Avatar billede _et Praktikant
03. juli 2005 - 22:41 #13
Fedt nok. - Tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester