Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [SQL] Stored Procedure di base

    Come mai questa procedura mi da errore ???

    Mi dice: Dichiarare la variabile '@Tabella'.
    Ho provato pure a dichiarare ma e' uguale !!!

    codice:
    USE myDatabase
    GO 
    CREATE PROC Test
    	@Tabella NVARCHAR(50)
    AS
    SELECT *
    FROM @Tabella
    GO
    Come posso fare per passare la Tabella dove fare la Query ???

  2. #2
    Hai sbagliato la sintassi in 2 punti:

    [list=1][*]@Tabella è un parametro in input e non una variabile da dichiarare nella procedura, quindi deve mettere le parentesi come per una qualsiasi funzione che abbia parametri in ingresso.
    [*]Poichè @Tabella è una variabile di tipo stringa, la Select dovrà essere eseguita utilizzando il comando EXEC al quale bisogna passare l'istruzione completa sotto forma di stringa.[/list=1]


    il codice corretto è questo:
    codice:
    USE myDatabase
    GO 
    CREATE PROC Test(@Tabella NVARCHAR(50))
    
    AS
     	EXEC('SELECT * FROM ' + @Tabella)
    GO

    spero di essermi spiegata.


    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3
    GRANDE!

    ho fatto una piccola modifica:
    codice:
    IF OBJECT_ID('dbo.Test') IS NOT NULL
    DROP PROC dbo.Test
    GO
    CREATE PROC Test
    	(@Tabella NVARCHAR(50))
    AS
     	EXEC('SELECT * FROM ' + @Tabella)
    GO
    E fin qui tutto ok!

    Ma se ho 2 o piu' parametri in uscita ???
    es:

    codice:
    IF OBJECT_ID('dbo.Test') IS NOT NULL
    DROP PROC dbo.Test
    GO
    
    CREATE PROC Test
    	(@Tabella NVARCHAR(50))
    AS
     	EXEC('SELECT * FROM ' + @Tabella) -- Parametro in uscita 1
    	EXEC('SELECT COUNT(ID) AS TotCall FROM ' + @Tabella) -- Parametro in uscita 2
    	EXEC('SELECT SUM(TIME_TO_SEC(TIMEDIFF(Ora_Inizio,Ora_Fine))) AS TotTime FROM ' + @Tabella) -- Parametro in uscita 3
    	-- ..................................>>
    	-- e cosi via .......................>>
    	-- ..................................>>
    GO
    Grazie mille in anticipo,
    poi non ti rompo piu',

    ciao!

  4. #4
    Prova a cercare info sui "Parametri di Output" o "Variabili di Output".
    Con quelli dovresti poter risolvere


    Buona ricerca e buon lavoro

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  5. #5
    e' proprio quello il problema, trovo solo degli esempi di 20/30 righe, e chiaramente non ci capisco nulla,
    sono all'inizio delle STORE PROCEDURE,

    mica conosci qualche guida di base on-line ???

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    di solito funziona in questo modo
    crei una procedura che abbia variabili in in e out
    CREATE PROCEDURE name (var1 number in, var2 number out, var3 number out)
    devi solo cercare la forma corretta per sql server

  7. #7

  8. #8
    Originariamente inviato da w_t
    e' proprio quello il problema, trovo solo degli esempi di 20/30 righe, e chiaramente non ci capisco nulla,
    sono all'inizio delle STORE PROCEDURE,

    mica conosci qualche guida di base on-line ???
    Prova a partire da questo esempio (dalla guida di sql server):
    codice:
    USE Northwind
    GO
    -- Create a procedure that takes one input parameter
    -- and returns one output parameter and a return code.
    CREATE PROCEDURE SampleProcedure @EmployeeIDParm INT,
             @MaxQuantity INT OUTPUT
    AS
    
    -- Do a SELECT using the input parameter.
    SELECT FirstName, LastName, Title
    FROM Employees
    WHERE EmployeeID = @EmployeeIDParm
    
    -- Set a value in the output parameter.
    SELECT @MaxQuantity = MAX(Quantity)
    FROM [Order Details]
    
    GO
    
    
    -- Declare the variables for the return code and output parameter.
    DECLARE @ReturnCode INT
    DECLARE @MaxQtyVariable INT
    
    -- Execute the stored procedure and specify which variables
    -- are to receive the output parameter and return code values.
    EXEC @ReturnCode = SampleProcedure @EmployeeIDParm = 9,
       @MaxQuantity = @MaxQtyVariable OUTPUT
    
    -- Show the values returned.
    PRINT ' '
    PRINT 'Return code = ' + CAST(@ReturnCode AS CHAR(10))
    PRINT 'Maximum Quantity = ' + CAST(@MaxQtyVariable AS CHAR(10))
    GO

    se hai problemi poi chiedi e vediamo di risolverli insieme. ma intanto sforzati di fare da solo ok?

    buon lavoro

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  9. #9
    ok!
    Ti ringrazio molto sei veramente paziente,
    ok se non riesco ti posto !!!

    ciao!

  10. #10
    I tuoi insegnamenti hanno funzionato!!!

    codice:
    IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[GetJobs]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
    DROP PROC GetJobs
    GO
    
    CREATE PROC GetJobs @id AS INT, @count AS INT OUT 
    AS
    BEGIN
    	SELECT @count = Count(*) FROM jobs WHERE job_id >@id
    	SELECT * FROM jobs WHERE job_id >@id
    END
    GO
    VB.NET
    ------------------------------------

    codice:
    Imports System.Data
    Imports system.Data.SqlClient
    
    Public Class Form1
    
        Private oConn As New SqlConnection("Data Source=(local);Initial Catalog=pubs;User ID=sa;Password=;")
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Dim DS As New DataSet()
            Dim DA As New SqlDataAdapter()
            Dim oComm As New SqlCommand()
            Dim param As SqlParameter
    
            oComm = New SqlCommand("GetJobs", oConn)
            oComm.CommandType = CommandType.StoredProcedure
    
            param = oComm.Parameters.Add(New SqlParameter("@id", SqlDbType.Int))
            param.Direction = ParameterDirection.Input
            param.Value = 0
    
            param = oComm.Parameters.Add(New SqlParameter("@count", SqlDbType.Int))
            param.Direction = ParameterDirection.Output
            param.Value = 0
    
            DA.SelectCommand = oComm
            DA.Fill(DS, "jobs")
    
            'visualizzo la QUERY
            DataGrid1.DataSource = DS.Tables("jobs")
    
            'visualizzo il parametro di OUT
            MsgBox(param.Value)
    
        End Sub
    
    End Class
    FUNZIONA TUTTO PERFETTAMENTE!!

    GRAZIE MILLE!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.