Scrittura da tabella SQL Server su file utilizzando BCP




 Ho appena realizzato che i miei cappucci erano attivi in ​​SQL Server, ha. 

 Ad ogni modo, sto cercando di scrivere 

 **serverName.databaseName.databaseInstanceName.TableName** 

 a 

 **C: \ NomeFile.xml** 

 usando **bcp** e voglio scrivere solo colonne **Col1** e **Col2** , posso ottenere un piccolo aiuto per la sintassi? Sto faticando qui. 

 Grazie, 

 Ted
FYI per chiunque altro .... 

 bcp "Seleziona qualsiasi cosa da dbInstanceName.dbo.tableName" quesryout C: \ output.txt -e C: \ errors.txt -c -T -S localhost \ dbName
Non sono sicuro se il suo buon approccio per risolverlo, ma ha funzionato per me. 

 Ho appena inserito in quel tavolo la versione corretta e i nomi delle migrazioni già applicate, l'ho fatto in EF Core e funziona davvero, ma per favore aspetta qualcuno che si accorga di ciò che sto scrivendo. 

 Il problema che vedo è che hai bisogno di riempire altri due campi (in EF Core ci sono solo due colonne) ma penso che puoi riceverli usando per esempio SQL Profiler <p>la seconda sintassi è semplicemente un collegamento che consente di specificare la colonna e aggiungere un indice su di essa in una singola clausola.</p><p>questo funziona bene nei casi in cui si desidera semplicemente creare una colonna e aggiungere un indice su di essa.</p><p>dovrai utilizzare la prima sintassi se vuoi fare qualcosa di più complicato, come aggiungere un indice basato su più colonne anziché una singola colonna, o se stai aggiungendo o modificando un indice su una colonna esistente; cioè, non stai creando la colonna e l'indice su di essa contemporaneamente.</p> <p>il driver del database aggiungerà nuovamente il risultato alla tabella dopo il salvataggio.</p><p>quindi, qualcosa come il prossimo dovrebbe funzionare:</p><pre><code>$table = $this-&gt;gettable(); if ($table-&gt;save($data)  true) { return $table-&gt;id; } else { return false; } </code></pre> Ovunque nel sistema, dove hai accesso a `MyContext` , fai questo: 


```
context.Database.GetDbConnection().GetType().Name

```
  Ad esempio, è `SqliteConnection` per SQLite o `SqlServerConnection` per SQL Server e così via. 

 **Tuttavia non sono sicuro di dover smaltire la connessione in seguito!** vai qui ci sono vari tipi di scrittura...ciaooo
http://www.webbolo.net/crea-nickname/nick.php Non sapevo che questo non fosse supportato nel 2012. Quindi circa 1,7K visualizzazioni in due anni e non molta esposizione. Ma nel caso qualcuno di nuovo a Dapper sia atterrato qui e chiedendosi se funziona, la risposta è che funziona. Utilizzando l'ultima versione di, al momento della stesura di questo documento, [Dapper v1.42 di nuget](https://www.nuget.org/packages/Dapper/) : 


```
var sql = "SELECT id,a,b,c FROM Foo WHERE Foo.id in (
    SELECT foo_id FROM foo-bar WHERE bar-id=@bar_id)"
using (var cn = new SqlConnection(the_connection_string)) {
  cn.Open();
  var returnedObject = cn.Query<dynamic>(sql, new { bar_id = some_value });
}

``` <p>esistono diversi metodi per ottenere un piano di esecuzione, che uno da utilizzare dipenderà dalle circostanze. in genere è possibile utilizzare sql server management studio per ottenere un piano, tuttavia se per qualche motivo non è possibile eseguire la query in sql server management studio, potrebbe essere utile essere in grado di ottenere un piano tramite sql server profiler o ispezionando la cache del piano.</p><h2>metodo 1: utilizzo di sql server management studio</h2><p>sql server è dotato di un paio di funzionalità intuitive che rendono molto semplice l'acquisizione di un piano di esecuzione, semplicemente assicurati che la voce di menu &quot;includi piano di esecuzione effettivo&quot; (presente nel menu &quot;query&quot;) sia spuntata ed esegui la query come normale .</p><p><img src="https://i.stack.imgur.com/0icgu.png" alt="include action execution plan menu item"></p><p>se si sta tentando di ottenere il piano di esecuzione per le istruzioni in una stored procedure, è necessario eseguire la stored procedure, in questo modo:</p><pre><code>exec p\_example 42 </code></pre><p>una volta completata la tua query, dovresti visualizzare una scheda aggiuntiva intitolata &quot;piano di esecuzione&quot; nel riquadro dei risultati. se hai eseguito molte affermazioni, potresti vedere molti piani visualizzati in questa scheda.</p><p><img src="https://i.stack.imgur.com/ihkoe.png" alt="screenshot of an execution plan"></p><p>da qui è possibile ispezionare il piano di esecuzione in sql server management studio oppure fare clic con il tasto destro del mouse sul piano e selezionare &quot;salva piano di esecuzione con nome ...&quot; per salvare il piano in un file in formato xml.</p><h2>metodo 2 - utilizzo delle opzioni showplan</h2><p>questo metodo è molto simile al metodo 1 (in realtà questo è ciò che sql server management studio esegue internamente), tuttavia l'ho incluso per completezza o se non è disponibile sql server management studio.</p><p>prima di eseguire la query, eseguire <strong>uno</strong>delle seguenti affermazioni. l'istruzione deve essere l'unica dichiarazione nel batch, cioè non è possibile eseguire un'altra istruzione allo stesso tempo:</p><pre><code>set showplan\_text on set showplan\_all on set showplan\_xml on set statistics profile on set statistics xml on -- the is the recommended option to use </code></pre><p>queste sono opzioni di connessione e quindi è necessario eseguirlo solo una volta per connessione. da questo punto in poi tutte le istruzioni eseguite saranno accompagnate da un <strong>set di risultati aggiuntivi</strong>contenente il piano di esecuzione nel formato desiderato - è sufficiente eseguire la query come si farebbe normalmente per vedere il piano.</p><p>una volta che hai finito puoi disattivare questa opzione con la seguente dichiarazione:</p><pre><code>set &lt;&lt;option&gt;&gt; off </code></pre><h3>confronto dei formati del piano di esecuzione</h3><p>a meno che tu non abbia una forte preferenza, la mia raccomandazione è di usare l'opzione <code>statistics xml</code>. questa opzione è equivalente all'opzione &quot;includi piano di esecuzione effettivo&quot; in sql server management studio e fornisce la maggior parte delle informazioni nel formato più conveniente.</p><ul> <li><code>showplan\_text</code>: visualizza un piano di esecuzione stimato basato sul testo base, senza eseguire la query</li> <li><code>showplan\_all</code>: visualizza un piano di esecuzione stimato basato su testo con stime dei costi, senza eseguire la query</li> <li><code>showplan\_xml</code>: visualizza un piano di esecuzione stimato basato su xml con stime dei costi, senza eseguire la query. questo è equivalente all'opzione &quot;visualizza piano di esecuzione stimato ...&quot; in sql server management studio.</li> <li><code>statistics profile</code> - esegue la query e visualizza un piano di esecuzione effettivo basato sul testo.</li> <li><code>statistics xml</code> - esegue la query e visualizza un piano di esecuzione effettivo basato su xml. ciò equivale all'opzione &quot;includi piano di esecuzione effettiva&quot; in sql server management studio.</li> </ul><h2>metodo 3 - utilizzo di sql server profiler</h2><p>se non è possibile eseguire direttamente la query (o la query non viene eseguita lentamente quando viene eseguita direttamente - ricordare che vogliamo un piano di esecuzione della query non valido), è possibile acquisire un piano utilizzando una traccia di sql server profiler. l'idea è di eseguire la tua query mentre è in esecuzione una traccia che sta catturando uno degli eventi &quot;showplan&quot;.</p><p>si noti che a seconda del carico si <strong>può</strong>utilizzare questo metodo in un ambiente di produzione, tuttavia è necessario prestare attenzione. i meccanismi di definizione dei profili di sql server sono progettati per minimizzare l'impatto sul database ma ciò non significa che non be <em>any</em> impatto sulle prestazioni.potresti anche avere problemi nel filtrare e identificare il piano corretto nella tua traccia se il tuo database è in uso intensivo. dovresti ovviamente controllare con il tuo dba per vedere se sono contenti di averlo fatto sul loro prezioso database!</p><ol> <li>aprire sql server profiler e creare una nuova traccia connettendosi al database desiderato rispetto al quale si desidera registrare la traccia.</li> <li>sotto la scheda &quot;selezione eventi&quot; seleziona &quot;mostra tutti gli eventi&quot;, controlla la riga &quot;prestazioni&quot; -&gt; &quot;showplan xml&quot; ed esegui la traccia.</li> <li>mentre la traccia è in esecuzione, fare tutto ciò che è necessario per eseguire la query a esecuzione lenta.</li> <li>attendi il completamento della query e interrompi la traccia.</li> <li>per salvare la traccia, fare clic con il pulsante destro del mouse su xml del piano in sql server profiler e selezionare &quot;estrai dati evento ...&quot; per salvare il piano in file in formato xml.</li> </ol><p>il piano che ottieni è equivalente all'opzione &quot;includi piano di esecuzione effettivo&quot; in sql server management studio.</p><h2>metodo 4 - ispezione della cache delle query</h2><p>se non è possibile eseguire direttamente la query e non è possibile acquisire una traccia di profiler, è comunque possibile ottenere un piano stimato ispezionando la cache del piano di query sql.</p><p>esaminiamo la cache del piano interrogando sql server <a href="http://msdn.microsoft.com/en-us/library/ms188754.aspx">dmvs</a> . la seguente è una query di base che elencherà tutti i piani di query memorizzati nella cache (come xml) insieme al loro testo sql. nella maggior parte dei database sarà necessario aggiungere ulteriori clausole di filtro per filtrare i risultati fino ai soli piani a cui si è interessati.</p><pre><code>select usecounts, cacheobjtype, objtype, text, query\_plan from sys.dm\_exec\_cached\_plans cross apply sys.dm\_exec\_sql\_text(plan\_handle) cross apply sys.dm\_exec\_query\_plan(plan\_handle) </code></pre><p>esegui questa query e fai clic sul piano xml per aprire il piano in una nuova finestra - fai clic con il pulsante destro e seleziona &quot;salva piano di esecuzione come ...&quot; per salvare il piano in file in formato xml.</p><h1>gli appunti:</h1><p>poiché ci sono così tanti fattori coinvolti (che vanno dalla tabella e dallo schema dell'indice fino ai dati archiviati e alle statistiche della tabella) dovresti <strong>sempre</strong>prova ad ottenere un piano di esecuzione dal database che ti interessa (normalmente quello che sta vivendo un problema di prestazioni).</p><p>non è possibile acquisire un piano di esecuzione per le stored procedure crittografate.</p><h2>piani di esecuzione &quot;effettivi&quot; o &quot;stimati&quot;</h2><p>un piano di esecuzione <em>effettivo</em> è uno in cui sql server esegue effettivamente la query, mentre un <em>stimato</em>piano di esecuzione sql server elabora ciò che <em>would</em> fa senza eseguire la query. sebbene logicamente equivalente, un piano di esecuzione reale è molto più utile in quanto contiene ulteriori dettagli e statistiche su ciò che effettivamente è accaduto durante l'esecuzione della query. questo è essenziale quando si diagnosticano problemi in cui le stime di sql server non sono attive (ad esempio quando le statistiche non sono aggiornate).</p><ul> <li> <a href="http://sqlserverpedia.com/blog/sql-server-bloggers/estimated-and-actual-execution-plan-revisited/">piano di esecuzione stimato ed effettivo rivisto</a> </li> </ul><h2>come interpreto un piano di esecuzione della query?</h2><p>questo è un argomento degno di un (gratuito) <a href="https://www.simple-talk.com/books/sql-books/sql-server-execution-plans-second-edition-by-grant-fritchey/">libro</a> a sé stante.</p><h2>guarda anche:</h2><ul> <li> <a href="http://www.simple-talk.com/sql/performance/execution-plan-basics/">basi del piano di esecuzione</a> </li> <li> <a href="http://msdn.microsoft.com/en-us/library/ms178086.aspx">showplan batch di permessi e transact-sql</a> </li> <li> <a href="http://www.dbsnaps.com/sql-server/sql-server-query-hashes/">sql server 2008 - utilizzo degli hash di query e degli hash del piano di query</a> </li> <li> <a href="http://www.mssqltips.com/sqlservertip/1661/analyzing-the-sql-server-plan-cache/">analisi di sql server plan cache</a> </li> </ul> >  Le istantanee del modello sono utilizzate per qualsiasi altra cosa tranne Revert-Migration? 
> 
> 

 Sì. Ci sono alcuni casi limite in cui è necessario. Su SQL Server, questi casi sono: 

* AlterColumn quando la colonna viene ridotta o l'espressione calcolata viene modificata e gli indici devono essere ricostruiti
* CreateIndex su una tabella ottimizzata per la memoria quando l'indice è univoco e fa riferimento a colonne nullable

 Quindi la maggior parte delle volte è probabilmente sicuro da eliminare, ma per favore verifica che le tue migrazioni funzionino ancora dopo averlo fatto. <p>il campo deve essere dichiarato <code>public</code> per una visibilità adeguata dal markup aspx. in ogni caso, puoi dichiarare una proprietà:</p><pre><code> private string clients; public string clients { get { return clients; } } </code></pre><p><strong> aggiornamento: </strong>può anche essere dichiarato come <code>protected</code>, come indicato nei commenti seguenti.</p><p>quindi, per chiamarlo sul lato aspx:</p><blockquote> <p>&lt;% = clienti%&gt;</p> </blockquote><p>si noti che questo non funzionerà se lo si posiziona su un attributo di tag del server. per esempio:</p><blockquote> <p>&lt;asp: label runat = &quot;server&quot; text = &quot;&lt;% = client%&gt;&quot; /&gt;</p> </blockquote><p>questo non è valido questo è:</p><blockquote> <p>&lt;div&gt; &lt;% = clienti%&gt; &lt;/ div&gt;</p> </blockquote> Aggiungi `Microsoft.EntityFrameworkCore` v2.1.1 dai pacchetti Nuget. Quindi, utilizzare la classe `SqlServerDbFunctionsExtensions` per ottenere il confronto della data. Fai quanto segue nella mia applicazione. Ho trovato differenze in minuti tra Date1 e Date2: 


```
DbFunctions dfunc = null;
IQueryable<TableName> lQueryableTableName = lObjInitDbContext.gObjServerAuditHistoryDbContext
   .ServerAuditHistorys
   .Where(x => SqlServerDbFunctionsExtensions
       .DateDiffMinute(dfunc, Convert.ToDateTime(Date1), Convert.ToDateTime(Date2)) < 1);

```
  Spero che questo ti possa aiutare !!!