私の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
を作成する必要があります。それから、私はコードからそれを行うことができるはずですか?
Visual Studioデータベースプロジェクトで作業しています。カスタムツールを使用せずにこれらのスクリプトをデプロイすることができます。 –
実際にはVSデータベースプロジェクトではありません。 –
プロシージャスクリプトを作成するときには、スクリプトが実行されるようにドロップ(存在する場合)してから作成してください。また、適切なセキュリティを確保するために必要なグラントステートメントも含めてください。次に、「GO」という単語を検索するときは、スクリプト内のどこにあるのかに関するMicrosoftのルールを理解しています。リンクhttps://msdn.microsoft.com/en-us/library/ms188037.aspxを参照してください。あなたの場合のように聞こえますが、1つのスクリプトがGOステートメントを終了していないことがあります。 – Mike