Kobarin's Development Blog

C#やASP.NETなどについての記録です。

SQLserver

ASP.NET MVCからSQL ServerにWindows認証ログインで接続し、イニシャライザーを実行させる

Entity Frameworkではイニシャライザーを使うことで、データモデルに基づき データベースの作成 テーブルの作成 レコードの初期生成 を自動実行してくれます。 まずはLocalDBでなくSQL Server接続の接続文字列を取得 Visual Studio環境であれば /app_data/~…

SQLserverの.mdfファイルを別マシンでattachできない(Error:5123)の対応

症状 テスト環境をつくろうと、サーバーの.mdfファイルをローカルPCに移動してSSMSからattachしようとしたところ、Error5123により出来ない問題が起こりました。 情報源 エラー番号「5123」をもとに検索したところ、以下のスレッドが見つかりました。 Erro…

SQL Serverの別名が効かなくなった際の対応

SQL Serverにエイリアス(別名)で接続する - Kobarin's Development Blogで昔投稿した別名設定に関して、先日突如機能しなくなったため、Technetフォーラムにて別名で接続できないのスレッドでご相談させて頂きました。以下、結果のみまとめます。 経緯 Vis…

ストアドプロシージャーを実行時、パラメータを省略

ストアドプロシージャをC#等から呼び出す際、パラメータを省略したいケースがあります。 例えば、通常は空欄のデータであっても以下のように1行必要です(C#の例)。 cmd.Parameters.Add("@message", SqlDbType.NVarChar).Value = ""; パラメータを省略して…

Visual Studio で、ストアドプロシージャのパラメータを知る方法

SqlDataSourceを使ってストアドプロシージャを呼び出す場合、ウィザードに従えばパラメータ(引数)が自動生成され、データ型まで自動でセッティングしてくれて便利ですね。 一方で、〜.aspx.cs や〜.aspx.vb 等のコードページでは、相変わらずこんなコード…

SqlCommandでReturnValueを取得

using (SqlCommand cmd = cn.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = @"upGetColor"; cmd.Parameters.Add("@name", SqlDbType.NvarChar).Value = "Red"; cmd.Parameters.Add("@code", SqlDbType.NvarChar).Di…

SQL Serverにエイリアス(別名)で接続する

「別名」を使う事で、例えば本来インスタンス付きで「(local)\SQLEXPRESS」等で接続しなければならない場合、簡略化して「SQLSVR」等の別名でアクセスさせることが出来ます。以下、「(local)\SQLEXPRESS」を「SQLSVR」として接続する例として示します。 操作…

SQL Server 2008 バージョン番号一覧

Release,Service Pack Version Number SQL Server 2008 RTM 10.0.1600 SQL Server 2008 Service Pack 1 (SP1) 10.0.2531 SQL Server 2008 Service Pack 2 (SP2) 10.0.4000 参考 SQL Server のバージョン番号を調べる方法 http://d.hatena.ne.jp/matu_tak/200…

ログインとデータベースユーザーのテーブル

SQLserverログインと、各データベースのデータベースユーザーを確認するには、以下のSelect文で可能。 SQLserverログイン select * from master..syslogins データベースユーザー use ; select * from sysusers

ログインとデータベースユーザーのテーブル

SQLserverログインと、各データベースのデータベースユーザーを確認するには、以下のSelect文で可能。 SQLserverログイン select * from master..syslogins データベースユーザー use ; select * from sysusers

ログインとデータベースユーザーのテーブル

SQLserverログインと、各データベースのデータベースユーザーを確認するには、以下のSelect文で可能。 SQLserverログイン select * from master..syslogins データベースユーザー use ; select * from sysusers

SQLserverで、肥大化したファイルサイズを縮小

MSDEの頃と同様にDBCCを使う。 これは、SQLserver Management Studio上のクエリやCommon SQL Environment上でも実行可能。 DBCC SHRINKFILE(論理名) 「論理名」は以下のようにして調べられる。 USE データベース名 SELECT * FROM sys.database_files また、.…

データベースユーザーを、SQL Serverログインにマッピング

SqlServerログインとデータベースユーザーのマッピングについて解説しています。 用語 データベースユーザー…SSMSの[DB]-[セキュリティ]-[ユーザ]内にあるアカウント SQL serverログイン…SSMSの[セキュリティ]-[ログイン]内にあるアカウント なぜマッピング…

SQL Server Management Studio上で、フィールドの追加などなど

SQL Server Management Stugioでフィールドの追加や作成を行おうとすると、 「テーブルの削除後に再作成が必要な作業は許可されていません」という旨のエラーが出る。 フィールドの追加などの処理は、内部的にはどうやらテーブルの再構築が必要になるらしい…

SQLserverで、度数テーブルを使わずに度数分布

「俺の知合い」テーブル 人名 体重 たけし 60.5 つよし 55.8 まさし 71.2 ・・・ ・・ のようなテーブルがあり、これを度数分布表示行おうとした場合、 以下のようなテーブルを作り、SQLのbetweenを使って表示する手法がある。 「体重ランク」テーブル 下限 …

SqlDataSourceで、手動でParameterを追加する方法

SqlCommandと同じようにコードを書いたらParameterが通っていなかった件。 「@」の要不要が違うらしい。以下、違いを書いておく。 SqlCommandの例 Command1.Parameters.Add("@param1", SqlDbType.NVarChar).Value = "ABCDEF"; SqlDataSourceの例 SqlDataSou…

SqlDataSourceを実行時に、該当件数を取得

データバインド時に該当件数を取得するケースがある。 GridViewのRows.Countを使っても、現在表示中の行数しか取得できないため、ページング等をしていると全体の件数は取得できない。 以下のようにコーディングする事で、SqlDataSourceのSelect実行時に全件…

SQLで最頻値を求める

「私の服」テーブルの中で、最も多い色を求める。 select 色, count(*) as 枚数 from 私の服 group by 色 having count(*) >= (select max(CNT) from (select count(*) AS CNT from 私の服 group by 色 ) as C ) 色 枚数 赤 23 ↓ 「”私の服”の中で一番多い色…

INSERTしたレコードのオートナンバーを取得する方法

オートナンバーを取得する場合、レコードを追加してみないと番号が分かりません。 例えば、ストアドプロシージャを使って親テーブルにINSERT後、INSERTした親テーブルのIDを子テーブルに渡してINSERT・・・等の場面があります。ストアドプロシージャ内で以下…

CSVファイルのデータをSQLserverにインポート(TextFieldParser編)

string strPath = "c:\test.csv"; DataTable dt = new DataTable(); //Shift JISで読み込む using (Microsoft.VisualBasic.FileIO.TextFieldParser tfp = new Microsoft.VisualBasic.FileIO.TextFieldParser(strPath, System.Text.Encoding.GetEncoding(932)…

CSVファイルのデータをSQLserverにインポート(OleDb編)

string strDir = "d:\"; striing strFileName= "test.csv"; DataTable dt = new DataTable(); //CSVファイルのデータを、DataTableに変換 using (OleDbConnection con = new OleDbConnection()) { con.ConnectionString = String.Format("Provider=Microsoft…

C#から、ストアドプロシージャの戻り値を取得する最短(?)コード

2行でいけます。 using (SqlConnection cn = new SqlConnection(strConnectionString)) { using (SqlCommand cmd = cn.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@name", SqlDbType.NVarChar, 200).Value = …

SqlTransactionの基本コード

using (SqlConnection cn = new SqlConnection([接続文字列])) { using (SqlCommand cmd = cn.CreateCommand()) { cn.Open(); SqlTransaction tran = cn.BeginTransaction(); try { cmd.Transaction = tran; cmd.CommandText = @"insert into Table1(Field1)…

VisualStudio2008からSQLへの接続時、「この接続用にデータベース スキーマを接続できませんでした」のエラー対策

SQLserver2008のインストールに失敗したので2005に戻したところ、 VisualStudio2008のSqlDataSourceの設定画面でDBに接続しようとすると、 'Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' …

SQLserverのテーブルのスキーマ変更方法

SQL Server Management Studioで、テーブル選択 右クリックで「変更」 画面右側のプロパティウィンドウに「スキーマ」があるので、ドロップダウンから選択 警告メッセージが現れるが、気にせずOK

SQLserverで、ランダムにselect結果を出力する方法

SELECT * FROM Table1 ORDER BY NEWID() これだけ。