2016-12-28 15 views
0

私のVisual Studio(C#)ソリューションでは、stored proceduresという名前のフォルダがあり、T-SQLを含む.sqlファイルが多数あります。C#を使用してソリューションフォルダからSQL Serverデータベースに追加する

-- ============================================= 
-- Author:  Foo Bar 
-- Create date: 28-12-2016 
-- Description: Create XrefUsers 
-- ============================================= 
CREATE PROCEDURE [dbo].[spCreateXrefUsers] 
AS 
BEGIN 

私は私のデータベースにすべてのこれらのストアドプロシージャを追加したい:

は、ここでの例です。

すべての.sqlファイルをコピーし、コピーを.tt(T4ファイル拡張子)に変更し、TextTemplatingFilePreprocessorをカスタムツールとして設定しました。だから私が試したGO (Transact-SQL)

を::

public bool AddStoredProcedures() 
{ 
    try 
    { 
     //spCreateXrefUsers_sql.tt 
     CreateStoredProcedure(new spCreateXrefUsers_sql().TransformText()); 
    } 
    catch (Exception ex) 
    { 
     return false; 
    } 
    return true; 
} 

private static void CreateStoredProcedure(string spText) 
{ 
    var connectionString = MigrateHelpers.GetConnectionStringQA(); 
    //var commandText = string.Format("EXEC sp_executesql {0}", spText);     

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     //SqlCommand command = new SqlCommand(commandText, connection); 
     SqlCommand command = new SqlCommand(spText, connection); 
     command.CommandType = CommandType.Text; 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
} 

しかし、私は次のエラーを取得する:

は今、私は、ストアドプロシージャを追加するために、このコードを書いた

Incorrect syntax near 'GO'.
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
Incorrect syntax near 'GO'.

私は読んだことがあります

spText = spText.Replace("GO", ""); 

しかし、まだそれは私を残します

'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.

エラーです。

T-SQLを実行するには、コードで変更する必要がありますか?

私はおそらくそれをすべて間違っています。私を教えてください!私は=>は、手動でストアドプロシージャを作成、実行することができていますVisual Studioで.SQLファイルを開くと

おそらく、私は新しいSQL CLR database project

を作成する必要があります。それから、私はコードからそれを行うことができるはずですか? enter image description here

+0

Visual Studioデータベースプロジェクトで作業しています。カスタムツールを使用せずにこれらのスクリプトをデプロイすることができます。 –

+0

実際にはVSデータベースプロジェクトではありません。 –

+0

プロシージャスクリプトを作成するときには、スクリプトが実行されるようにドロップ(存在する場合)してから作成してください。また、適切なセキュリティを確保するために必要なグラントステートメントも含めてください。次に、「GO」という単語を検索するときは、スクリプト内のどこにあるのかに関するMicrosoftのルールを理解しています。リンクhttps://msdn.microsoft.com/en-us/library/ms188037.aspxを参照してください。あなたの場合のように聞こえますが、1つのスクリプトがGOステートメントを終了していないことがあります。 – Mike

答えて

0

あなたが探しているのは、procsを一括読み込みする方法です。コマンドラインから実行できます。下のファイル例の「sqlcmd」行を持つバッチファイルを作成します。以下のcmdはWindows認証を使用していますが、SQLログインを使用するように変更できます。 sqlcmdのは "C:\ Program Files \ MicrosoftのSQLサーバ\クライアントSDK \ ODBC \ 110 \ツールBinnの/ sqlcmd.EXE \" で見つけることができます

https://msdn.microsoft.com/en-us/library/ms162773.aspx

-Sサーバー-dデータベース-EをSQLCMD - b -m-1 -r 1 -h-1 -ic:¥temp¥spCreateXrefUsers.sql

+0

私はファイルパスで作業したくありません!私は100%アレルギーのあるファイルパスを使用しています。 –

+0

私の無知なコメントを申し訳ありません。私はC#コードからsqlcmdを呼び出し、.sqlファイルを一時フォルダに書き込み、そのパスから実行することができます。ありがとうございました!これが私にとってうまくいくかどうかわかります。 –

関連する問題