Toon posts:

[SQL] - EXEC-returnvalue opvangen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb het volgende probleem. Ik wil een EXEC uitvoeren van een opgebouwde string. De returnwaarde wil ik opvangen in een variabele. De code zou er volgens mij zo uit moeten zien, maar dit werkt niet:
IF NOT (LTRIM(RTRIM(@WhereClause)) = '')
BEGIN
SET @Query = 'SELECT TOP 1 RecordID FROM tbl_FilterHistory ' + @WhereClause + ' AND UserID=' + CONVERT(VARCHAR(10), @UserID) + ' ORDER BY TimeStamp DESC'

SET @FilterNumber = EXEC(@Query)

IF (NOT (@FilterNumber IS NULL)) AND (@FilterNumber > 0)
BEGIN
SET @FilterExists = 1
END
ELSE
BEGIN
SET @FilterExists = 0
END
END

Waarom werkt dit niet en hoe moet het dan WEL?

Groeten,
Raimond Bakkes.

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op dinsdag 27 november 2001 10:01 schreef Chopper het volgende:
Hallo,
Hoi
SET @Query = 'SELECT TOP 1 RecordID FROM tbl_FilterHistory ' + @WhereClause + ' AND UserID=' + CONVERT(VARCHAR(10), @UserID) + ' ORDER BY TimeStamp DESC'

SET @FilterNumber = EXEC(@Query)
Ik weet niet over welke db het gaat, maar de meeste kennen wel een "select .. into .." constructie.
code:
1
2
3
SET @Query = 'SELECT TOP 1 RecordID INTO @UserID FROM tbl_FilterHistory ' + @WhereClause + ' AND UserID=' + CONVERT(VARCHAR(10), @UserID) + ' ORDER BY TimeStamp DESC'

EXEC(@Query)

Iets dergelijks. Werkt dat wel?

Verwijderd

Met SQL7.0 maak ik gebruik van de volgende function
code:
1
EXEC SP_EXECUTESQL @strSQL

Misschien met je het eens met EXEC sp_executesql @Query proberen. Ik weet echter niet of deze ook een waarde terug geeft..

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 16-09 08:48
Op dinsdag 27 november 2001 10:01 schreef Chopper het volgende:

SET @FilterNumber = EXEC(@Query)
Volgens mij krijg je van deze expressie alleen een recordset terug. Moet je anders kijken bij vb/asp tutorials/msdn refernce wat de attributen van exec return values zijn.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Als een string uitgevoerd wordt met exec() of sp_executesql (deze laatste heeft overigens de voorkeur) dan kan je variabelen binnen deze string niet hergebruiken binnen de rest van je batch aangezien de uitvoer van de string als een aparte batch wordt uitgevoerd. Iets als onderstaande zal dus niet werken.
code:
1
2
exec sp_executesql N'select @blaat=kolom from tabel ...'
print @blaat

Mogelijke oplossingen (heb ze niet getest):
1. werken met een temp-table
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare @blaat int

create table #mytmp (id int)

insert into #mytmp (id)
exec sp_executesql N'select top 1 kolom from tabel ....'

select @blaat=id from #mytmp

drop table #mytmp

if @blaat = 1
    print 'ok'
else
    print 'nope'

2. @@rowcount opvragen
code:
1
2
3
4
5
6
exec sp_executesql N'select top 1 kolom from tabel ....'

if @@rowcount = 1
    print 'ok'
else
    print 'nope'

Today's subliminal thought is:


Verwijderd

Topicstarter
Op dinsdag 27 november 2001 12:44 schreef Annie het volgende:
Als een string uitgevoerd wordt met exec() of sp_executesql (deze laatste heeft overigens de voorkeur) dan kan je variabelen binnen deze string niet hergebruiken binnen de rest van je batch aangezien de uitvoer van de string als een aparte batch wordt uitgevoerd. Iets als onderstaande zal dus niet werken.
code:
1
2
exec sp_executesql N'select @blaat=kolom from tabel ...'
print @blaat

Mogelijke oplossingen (heb ze niet getest):
1. werken met een temp-table
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare @blaat int

create table #mytmp (id int)

insert into #mytmp (id)
exec sp_executesql N'select top 1 kolom from tabel ....'

select @blaat=id from #mytmp

drop table #mytmp

if @blaat = 1
    print 'ok'
else
    print 'nope'

2. @@rowcount opvragen
code:
1
2
3
4
5
6
exec sp_executesql N'select top 1 kolom from tabel ....'

if @@rowcount = 1
    print 'ok'
else
    print 'nope'

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op dinsdag 27 november 2001 13:04 kopieerde Chopper een heel stuk tekst zonder iets toe te voegen
en u wilde daarmee zeggen... :?

Today's subliminal thought is:


  • 3volution
  • Registratie: September 2001
  • Niet online

3volution

tsja...

Nog een mogelijkheid:
code:
1
SET @Value = (SELECT TOP 1 <veld> FROM <blaat>)

(werkt natuurlijk alleen met een TOP 1 en maar 1 veld) ;)

  • Onno
  • Registratie: Juni 1999
  • Niet online
(en niet met een dynamisch gegenereerde query)
Pagina: 1