using (SqlConnection conn = DBLibrary.CreateConnection()) { conn.Open(); SqlTransaction transaction = conn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); using (SqlCommand command = conn.CreateCommand()) { try { command.Connection = conn; command.Transaction = transaction; StringBuilder sb = new StringBuilder(); sb.Append("SET NOCOUNT ON; "); //sb.Append("DECLARE @TargetTableName sysname "); //sb.Append("DECLARE @DailyString nvarchar(1024) "); //sb.Append("DECLARE @TotalSqlString nvarchar(1024) "); //sb.Append("DECLARE @ParmDefinition nvarchar(100) "); sb.Append("DECLARE TargetTables CURSOR FOR "); sb.Append("SELECT TABLE_NAME "); sb.Append("FROM INFORMATION_SCHEMA.TABLES "); sb.Append("WHERE"); sb.Append("(TABLE_NAME like '%DailyTotal') "); sb.Append("AND TABLE_TYPE = 'BASE TABLE' "); sb.Append("OPEN TargetTables "); sb.Append("FETCH NEXT FROM TargetTables INTO @TargetTableName "); sb.Append("WHILE @@FETCH_STATUS = 0 "); sb.Append("BEGIN "); sb.Append("SET @DailyString = 'DELETE FROM ' + '[' + @TargetTableName + ']'"); sb.Append("SET @TotalSqlString = 'DELETE FROM ' + '[' + REPLACE(@TargetTableName, 'DailyTotal', 'Total') + ']'"); sb.Append("PRINT @DailyString "); sb.Append("EXEC sp_executesql @DailyString "); sb.Append("PRINT @TotalSqlString "); sb.Append("EXEC sp_executesql @TotalSqlString "); sb.Append("FETCH NEXT FROM TargetTables INTO @TargetTableName "); sb.Append("END "); sb.Append("CLOSE TargetTables "); sb.Append("DEALLOCATE TargetTables"); command.Parameters.Add(new SqlParameter("@TargetTableName", System.Data.SqlDbType.NVarChar, 128)); command.Parameters.Add(new SqlParameter("@DailyString", System.Data.SqlDbType.NVarChar,1024)); command.Parameters.Add(new SqlParameter("@TotalSqlString", System.Data.SqlDbType.NVarChar, 1024)); command.Parameters.Add(new SqlParameter("@ParmDefinition", System.Data.SqlDbType.NVarChar, 100)); command.CommandText = sb.ToString(); command.CommandType = System.Data.CommandType.StoredProcedure; command.ExecuteNonQuery(); transaction.Commit(); } catch(Exception ex) { transaction.Rollback(); } } }
上記を実行するとcommand.ExecuteNonQuery();実行後に
"着信の表形式のデータ ストリーム (TDS) リモート プロシージャ呼び出し (RPC) プロトコル ストリームが不適切です。RPC 名が無効です。"
とエラーになってしまいます。
どういう状態なのでしょうか?解決策を教えてください。
//sb.Append("DECLARE @TargetTableName sysname ");以下のコメント状態から解除して
command.Parameters.Add(...をコメントにした常態にしてできたSQL文をManageMentStudioで流すとエラーにはならないです

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/12/26 03:47
2017/12/26 03:51
退会済みユーザー
2017/12/26 04:00