2017年12月19日火曜日

Azureチームからのメール問い合わせについて、スタックオーバーフローを紹介しているところに感銘を受けた

ここ最近(4,5年)、OSSの取り組みなどオープンな企業になっていくマイクロソフトは素敵だなぁって思う。
昔は、仕事でマイクロソフト製品を扱うと独自でクローズドな感覚で仕事をしていると感じていました。しかし、今のマイクロソフトは、市場の感覚でマイクロソフト製品、サービス群を使えていて、それらを絡めて全体として良いソリューション、サービスが世の中に提供できるよになってきていると感じています。
エンジニアにとっても、市場にとってもバリューの高い企業に返り咲いたと改めて実感。

メールの抜粋
------------------------------------------------------------
For questions or feedback, please visit Stack Overflow or contact Azure support.
    
Thank you,

Your Azure Team    

------------------------------------------------------------


2017年12月16日土曜日

SQL Serverで既定のデータベースファイルの作成場所を変更する。


SQL Server Management Studioでデータベースサーバの「プロパティ」を選択する。











データベースの設定で既定の場所を修正する



↓修正

データベースサーバを再起動する



SQL Server Management Studioで以下のクエリを実行して検証する。
create database kiyotaka
go

D:\SQLDataにデータファイルが出来ていて、


D:\SQLLogにログファイルが出来ていることを確認しました。



環境:
Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64)
        Sep  5 2017 16:12:34
        Copyright (c) Microsoft Corporation
        Developer Edition (64-bit) on Windows 10 Enterprise 6.3 <X64> (Build 16299: ) (Hypervisor)

2017年12月14日木曜日

SQL Server 2016 insert文で存在しない項目を指定してもストアドプロシージャが成功する

検証用のクエリ
------------------------------------------------------------
create database test
go
use test
go

create table test(i int, n nvarchar(50));
create table test2(i int, n nvarchar(50));

create or alter procedure testsp as
begin
insert into test (i,aaaaaaaaa) select bbbbbbbbb, n from test2 inner join #wrk on #wrk.id = test2.i;
end
コマンドは正常に完了しました。
・・・えっ?!
testテーブルには、aaaaaaaaaなんで項目がないのにエラーになる。
これはストアドのビルドでエラーとして判断してもらいたいものです。

環境:
・Microsoft SQL Server 2016 (SP1-CU2) (KB4013106) - 13.0.4422.0 (X64)
・Microsoft SQL Server 2016 (SP1-CU6) (KB4037354) - 13.0.4457.0 (X64)

2017年12月7日木曜日

クイックフォーマットとフォーマットはどっちが性能がよいのか?を検証してみた。(SSD)

使用したDISK
SSD:crutial MX300 2TB Firmware M0CR050
RAIDボード:PERC H710 mini

クイックフォーマット時間:一瞬(2,3秒)
フォーマと時間:

CrystalDiskMark6.0.0x64の結果
1)クイックフォーマット
1-1.1GBで測定

1-2.2GBで測定
1-3.4GBで測定
1-4.8GBで測定

2)フォーマット
2-1.1GBで測定

2-2.2GBで測定
2-3.4GBで測定
2-4.8GBで測定




2017年12月5日火曜日

IISとIIS Expressの違いについて>Visual Studio+IIS+SQL Serverで開発する場合の組み合わせを検証して見ました。

Visual Studio+IIS+SQL Serverで開発する場合の組み合わせを検証して見ました。
参考に。
Visual Studio Web Server Database VSが一般ユーザの場合 VSが管理者の場合
2015 IIS SQL Server localDB ×エラー※3※4 ×※3⇒ただの警告だから無視する
※10⇒DBをlocalDBからSQLServerへ変更する
SQL Server ×※4
IIS Express SQL Server localDB
SQL Server
2017 IIS SQL Server localDB ×エラー※3※4 ×※3⇒ただの警告だから無視する
※7⇒DBをlocalDBからSQLServerへ変更する
SQL Server ×※4 ○※6⇒※6はコーディングのバグ、※7
IIS Express SQL Server localDB ○※1 ○※6
※6はコーディングのバグ
SQL Server ○※8

※8:SSMSでセッションを切ってあげると動作する。容赦ないセッションの削除バッチを使うといい。
?:本来は動作するはず

------------------------------------------------------------

※1:これは発生しても自然に治った。はて?
---------------------------
Microsoft Visual Studio
---------------------------
ID 22852 のプロセスは実行されていません。
---------------------------
OK   
---------------------------

Microsoft Visual Studio ID 22852 のプロセスは実行されていません。

※2
---------------------------
Microsoft Visual Studio
---------------------------
プログラム 'http://localhost:83/MvcModel/Admin/Home/Index' を開始できません。



リモート プロシージャ コールに失敗し、実行されませんでした。


---------------------------
OK   
---------------------------

※3
DBが SQL Server Express LocalDBだとIISと組み合わせて使用する警告が発生する

※4
---------------------------
Microsoft Visual Studio
---------------------------
Web サーバーでデバッグを開始できません。起動された URL に一致する Web サイトは IIS の一覧に含まれていません。

詳細については [ヘルプ] をクリックしてください。
---------------------------
OK   ヘルプ   
---------------------------

※5
---------------------------
Microsoft Visual Studio
---------------------------
Web サーバーでデバッグを開始できません。リモート サーバーがエラーを返しました: (403) 使用不可能

詳細については [ヘルプ] をクリックしてください。
---------------------------
OK   ヘルプ   
---------------------------

※6
HomeControllerが複数見つかるえらーが発生

※7
System.Data.SqlClient.SqlException が発生しました
  HResult=0x80131904
  Message=SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL Network Interfaces, error: 50 - Local Database Runtime エラーが発生しました。LocalDB インスタンスを開始する際にエラーが発生しました: SQL Server プロセスを開始できませんでした。
)
  Source=.Net SqlClient Data Provider
  スタック トレース:
<例外のスタック トレースを評価できません>


※8

System.Data.SqlClient.SqlException が発生しました
  HResult=0x80131904
  Message=データベース "MvcModel" は現在使用中なので削除できません。
  Source=.Net SqlClient Data Provider
  スタック トレース:
<例外のスタック トレースを評価できません>


※9
ALTER TABLE [dbo].[Key2Table] ADD CONSTRAINT [PK_dbo.Key2Table] PRIMARY KEY ([Key1], [Key22])
System.Data.SqlClient.SqlException (0x80131904): オブジェクト名 'dbo.Key2Table' およびインデックス名 'PK_dbo.Key2Table' に重複したキーが見つかったので、CREATE UNIQUE INDEX ステートメントは終了しました。重複したキーの値は (1, 0) です。
制約またはインデックスを作成できませんでした。以前のエラーを調べてください。
ステートメントは終了されました。
   場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   場所 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   場所 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   場所 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext`1 c)
   場所 System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
   場所 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   場所 System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable`1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable`1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection)
   場所 System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass30.<ExecuteStatements>b__2e()
   場所 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()
   場所 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   場所 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements, DbTransaction existingTransaction)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
   場所 System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto)
   場所 System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
   場所 System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   場所 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   場所 System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   場所 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   場所 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   場所 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   場所 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   場所 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   場所 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   場所 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   場所 System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   場所 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   場所 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
ClientConnectionId:15235e99-b98f-4952-b7c6-3713e4f35bd3
Error Number: 1505、State: 1、Class: 16
オブジェクト名 'dbo.Key2Table' およびインデックス名 'PK_dbo.Key2Table' に重複したキーが見つかったので、CREATE UNIQUE INDEX ステートメントは終了しました。重複したキーの値は (1, 0) です。
制約またはインデックスを作成できませんでした。以前のエラーを調べてください。
ステートメントは終了されました。
PM> 

※10
SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL Network Interfaces, error: 50 - Local Database Runtime エラーが発生しました。LocalDB インスタンスを開始する際にエラーが発生しました: SQL Server プロセスを開始できませんでした。)

2017年12月4日月曜日

sys.schemaのnameを使うと発生する謎の「メッセージ 8152、レベル 16、状態 2、行 8 文字列データまたはバイナリ データが切り捨てられます。」

/*
SQL Serverのバージョンによって動作が異なるのでメモをUP

異なるSQL Serverの一覧
SQL Server Version 互換レベル 現象の発生
------------------------------------------------------------
SQL Server 2012 SP3 2005~2012 問題なし
SQL Server 2016 SP1 CU2 2005~2016 エラーが発生
SQL Server 2016 SP1 CU6 2005~2016 エラーが発生

現象は、下記のクエリでエラーが発生する場合としない場合があります。
*/

begin tran
--drop table #tablelist
CREATE TABLE #tablelist (SchemaName VARCHAR (10));
SELECT max(len(s.[name])) FROM sys.schemas s JOIN sys.tables t ON s.schema_id=t.schema_id
--3
INSERT INTO #tablelist SELECT s.[name] FROM sys.schemas s JOIN sys.tables t ON s.schema_id=t.schema_id
/*
メッセージ 8152、レベル 16、状態 2、行 8
文字列データまたはバイナリ データが切り捨てられます。
ステートメントは終了されました。
そもそもinsert into selectで投入するデータの最大桁数は、3桁なのにエラーとなる。
これは、SQL Serverの欠陥と見ている。
*/
rollback tran

SELECT s.[name] FROM sys.schemas s
/*
dbo
guest
INFORMATION_SCHEMA
sys
db_owner
db_accessadmin
db_securityadmin
db_ddladmin
db_backupoperator
db_datareader
db_datawriter
db_denydatareader
db_denydatawriter

「INFORMATION_SCHEMA」があるために、#tablelistの桁が18桁必要のようです。
しかし、inner join(内部結合)でデータを持ってきていないので、本来はエラーとなるべきではない。
SQL Serverの不具合と見ています。
*/

2017年12月2日土曜日

SAP Crystal Reports Service Packを集めてみた