6 messaggi dal 10 ottobre 2012
Ciao a tutti,
sto impazzendo, non riesco a creare una stored procedure (in MS SQLEXPRESS)da codice, qualcuno potrebbe aiutarmi?
Grazie.
Davide.
Modificato da dardizzola il 01 febbraio 2018 11.20 -
salve Davide,
ovviamente cosi' non e' molto facile rispondere :D:D

trivialmente, si puo' tranquillamente fare utilizzando il metodo ExecuteNonQuery similarmente a
using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string connString = @"Persist Security Info=False;Data Source=(Local)\SQLExpress,1660;Initial Catalog=Tempdb;Connect Timeout=15;Network Library=dbmssocn;Integrated Security=True;";

            System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);

            conn.Open();

            if (conn.State == System.Data.ConnectionState.Open) {

                foreach (string sqlStatement in GetAllCommands())
                {
                    try
                    {
                        System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sqlStatement, conn);
                        cmd.ExecuteNonQuery();
                        cmd.Dispose();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }

                conn.Close();
                conn.Dispose();
                conn = null;
                                                
            }
            
        }

        static List<string> GetAllCommands ()
        { 
                List<string> commands = new List<string>();

                commands.Add(@"IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_myProc]') AND type in (N'P', N'PC'))
  DROP PROCEDURE [dbo].[usp_myProc];");

                commands.Add(@"SET ANSI_NULLS ON;");
                commands.Add(@"SET QUOTED_IDENTIFIER ON;");

                commands.Add(@"CREATE PROCEDURE [dbo].[usp_myProc] (
    @Id int
  ,  @Data varchar(10) NULL
  )
AS BEGIN
/*                    */
/*  Author:    Andrea Montanari    */
/*  Date:    2018-02-01        */
/*  Modified:  __/__/____        */
/*                    */
/*  Please report suggestions/comments/bugs/feedback to:      */
/*  pippo@pippo.com            */
/*                    */
/*      ----------------                */
/*  attivita' eseguite dalla procedura  */
/*                    */
/*  parametri:              */
/*    @Id int          - specifica la riga da selezionare  */
/*    @Data varchar(10)    - valore passato alla procedura    */
/*                    */
/*                    */

  DECLARE @msg varchar(1000);

  BEGIN TRY
    IF (@Data IS NULL) BEGIN
      SET @msg = CAST(OBJECT_NAME(@@PROCID) AS sysname)
      RAISERROR ('Parametro @Action valorizzato incorrettamente per l''esecuzione della procedura [%s].', 16, 1, @msg);
      END;

    SELECT @Id    AS [Id passato]
      ,  @Data  AS [Data]

      --FROM .....
      --WHERE ....
      ;

  END TRY
  
  BEGIN CATCH
    -- ritorna l'errore
    DECLARE @ErrorMSG varchar(2000);
    SET @ErrorMSG = ERROR_MESSAGE();
    RAISERROR (@ErrorMSG, 16, 1);
    RETURN -100;
  END CATCH

END;");

            return commands;
        }
    }
}


come hai visto, non ho fatto un unico comando separato da "GO", in quanto il terminatore di comando "GO" NON e' un comando SQL, ma e' un terminatore riconosciuto dagli strumenti tradizionali messi da disposizione di SQL Server, quali SSMS, oSql.exe, che spezzando i comandi da eseguire ad ogni riscontro del terminatore "GO"...

ma la "fattibilita'" tecnica e' tutto un altro discorso... la connessione deve essere di uno user con privilegi DDL sulla base dati e non normali privilegi di accesso interattivo... [di solito,] queste operazioni quindi si fanno [solo] "una tantum" al momento della generazione/manutenzione della base dati e non in via quotidiana...

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
6 messaggi dal 10 ottobre 2012
Ti ringrazio.
Ora provo.

-- update: funziona, grazie! l'ho adattata alle mie esigenze.
Sono impazzito per due giorni dietro al GO, non sapevo proprio come fare.

grazie grazie grazie!

Davide.
Modificato da dardizzola il 01 febbraio 2018 16.23 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.