Toon posts:

Tabelnaam doorgeven aan stored procedure?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als ik een selectstatement in een stored procedure wil zetten en ik gebruik elke keer een andere tabelnaam als ik de procedure aanroep, hoe doe ik dat dan?

Ik heb al geprobeerd een parameter mee te geven

SELECT * FROM @table WHERE code=@code

maar nu krijg ik een foutmelding: Error 137: Must declare the variable '@Table'.

Kan iemand mij helpen?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Misschien handig de gebruikte database te vermelden?

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

Annie

amateur megalomaan

heb een donkerbruin vermoeden dat het om mssql gaat.
voorbeeldje:
code:
1
2
3
4
5
declare @sql nvarchar(500)
set @sql = N'select * from ' + @table
       + ' where code=@param'

exec sp_executesql @sql, N'@param varchar(100)', @param = @code

Today's subliminal thought is:


Verwijderd

Topicstarter
Ja sorry, database is SQL Server 2000

Zoveel verstand heb ik er niet van, maar van wat je me zegt kan ik heel weinig maken, ik heb er vanalles mee geprobeerd. Ik moet de procedure trouwens vanuit ASP aanroepen...

ASP code: set rs = db.execute("exec sp_select_job @table='"& CONST_TABLE &"', @code='" & job & "'")

Stored Procedure:
CREATE PROCEDURE sp_select_job

@table VARCHAR(255),
@code CHAR(20)

AS
BEGIN
declare @sql nvarchar(500)
set @sql = N'select * from ' + @table + ' where code="' + @code + '"'
END
exec sp_select_job @sql, @code
GO

Foutmelding:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).

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

Annie

amateur megalomaan

Niet lullig bedoeld, maar is het niet verstandig dat je wat meer info gaat zoeken over het gebruik van sprocs in mssql en het aanroepen daarvan via asp?

Anyway, hieronder heb ik wat neergekrabbeld. 't Is niet getest, dus er kunnen misschien wat syntax-foutjes inzitten, maar het idee moet duidelijk zijn dacht ik zo.

De sproc:
code:
1
2
3
4
5
6
7
8
9
create procedure dbo.sp_select_job
     @table varchar(255)
    ,@code char(20)
as
    declare @sql nvarchar(500)
    set @sql = N'select * from ' + @table
        + ' where code=''' + @code + ''''

    exec sp_executesql @sql

De asp code:
code:
1
2
3
4
5
6
7
8
Dim cm
Set cm = Server.CreateObject("adodb.command")
Set cm.ActiveConnection = db
cm.CommandType = adCmdStoredProc
cm.CommandText = "sp_select_job"
cm.Paremeters.Append cm.CreateParameter("@table", adVarChar, adParamInput, 255, CONST_TABLE)
cm.Paremeters.Append cm.CreateParameter("@code", adChar, adParamInput, 20, job)
Set rs = cm.Execute

Bovenstaande manier is natuurlijk niet de enige manier. Er zijn nog andere manieren om het op te lossen.

Succes.

Today's subliminal thought is:


Verwijderd

Topicstarter
Dankjewel dankjewel dankjewel!
Ik heb hem eindelijk na veel ploeteren aan het werken gekregen. Ik moest dit namelijk uitzoeken als gedeelte van mijn stageopdracht.
Uiteindelijk heb ik het op de volgende manier opgelost aangezien hij alleen de getalletjes als parametereigenschappen accepteerd(geen idee waarom trouwens):

Dim cm
Set cm = Server.CreateObject("adodb.command")
Set cm.ActiveConnection = db
cm.CommandType = 4
cm.CommandText = "sp_select_job"
cm.Parameters.Append cm.CreateParameter("@table", 200, 1, 255, CONST_TABLE)
cm.Parameters.Append cm.CreateParameter("@code", 129, 1, 20, job)
Set rs = cm.Execute

Groetjes en nogmaals dankjewel Annie!

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

Annie

amateur megalomaan

om de constanten (adChar enzo) te kunnen gebruiken moet je deze eerst declareren. MS is zo vriendelijk geweest om dit al voor je te doen (zijn er best veel namelijk) en ze te bundelen in een bestandje.
Meer info plus het bestand:
http://www.4guysfromrolla.com/webtech/faq/Beginner/faq7.shtml
En kijk ook eens hier:
http://www.4guysfromrolla.com/webtech/110199-1.shtml

Vind de constanten persoonlijk een stuk overzichtelijker dan al die getalletjes.

Today's subliminal thought is:

Pagina: 1