SQL Serverでバックアップから復元後にログインできない

一つの原因として、
復元したデータベースのユーザーと、稼働しているサーバーのログインが、うまくマッピングできなくなる
ことがあります。

これはSSMSのGUIからは対処不可で、ログインからユーザーマッピングしても
「ユーザー、グループ、またはロールは現在のデータベースに既に存在します。」
ということになります。

クエリを作って対応します。

Use [データベース名]
ALTER USER データベースのユーザー WITH LOGIN = ログインのユーザー

SQL Server へのインポートを楽におこなう

以下の記述は、SQL Server2005と2008で確認しましたが、以降は未確認です。

「データのインポートおよびエクスポート」ウィザードを使うことが多いと思いますが、このときにCSVなどからのインポートだと、インポート時のエラーが多発します。多くは項目毎に桁数や変数型の指定などをしていけば解消しますが、項目数が多いと、とても面倒です。

こんなときは、CSVをEXCELで読み取り、EXCELファイルにしてからインポートします。この場合は項目毎の指定はほぼ不要です。さすがマイクロソフトと言うべきか、そもそもどうなんだと考えさせる状況ではあります。

SQLでグループ毎に連番を振る

SQL Server 2005, 2008 に限る
key1+key2毎に連番、グループ中のどれかを特定するのはkey3

UPDATE  table
SET
	[updateColumn] = wt1.rownum
FROM
(
SELECT key1,key2, key3, 
ROW_NUMBER() OVER
(PARTITION BY key1, key2 ORDER BY [sortColumn] DESC) AS rownum
FROM table
) AS wt1
WHERE 
	table.key1 = wt1.key1
	table.key2 = wt1.key2
	table.key3 = wt1.key3

SQL Server 2008 で、既定のデータベースを削除してしまったとき

SQL Server 2008 Express
「ユーザーの既定データベースを開けません。 ログインに失敗しました。」となり、はまります。

対応としては

  1. コマンドプロンプトで、sqlcmd ?E -S InstanceName ?d master
  2. SQLプロンプトで、sp_defaultdb ‘user’s_login’, ‘master’ (’を忘れずに) >go