RSS

カテゴリー : SQLServer

[SQLServer]Stored Procedure サンプル

[SQLServer] servletなどのサーバーアプリケーションだとODBC,jdbcがつながらない

ユーザーDSN→設定したユーザーしかつかえない
システムDSN→他のユーザーも使用可能

たとえばsun.jdbc.odbc.JdbcOdbcDriverを使っていて
javaアプリケーションではつながるが、servletにするとつながらない場合なんかはあやしい。

select * from sysobjectsとかでもだめならより一層怪しい。

[SQLServer] SQLServerExpress,SQLServer2005などでリモート接続できない

SQL Serverのセキュリティ構成から、
「データベースエンジン」→「ローカル接続およびリモート接続」をオンにする。

[java] SQLServer jdbc接続

http://www02.so-net.ne.jp/~kikuta/jdbcnote/jdbcnote.html
http://support.microsoft.com/?scid=kb;ja;313100
http://www.ki.rim.or.jp/~kuro/Java/JDBC/JDBC-01.html
http://www.ki.rim.or.jp/~kuro/Java/JDBC/JDBC-02.html

— my source

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

public class jdbctest
{
public static void main(String[] args){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

String strConn = "jdbc:odbc:Ods01";
java.sql.Connection Conn =
DriverManager.getConnection(strConn,"sa","sa");

java.sql.Statement st=Conn.createStatement();
java.sql.ResultSet rs = st.executeQuery("SELECT * from sysobjects;");

while(rs.next())
{
System.out.println(rs.getString(2));
}
rs.close();
st.close();
Conn.close();

}
catch(java.sql.SQLException ex)
{
System.out.println("SQL Exception :" + ex);
ex.printStackTrace();

}
catch(Exception e){
System.out.println("Error:" + e);
e.printStackTrace();
}

}

}

[SQLServer] SQLServerExpress,SQLServer2005 などで saがログオンできない

・いつものようにwindows認証のみになっていないかを確認する。
・ManagementStudioなどでパスワードポリシーが有効になっていないか確認。
有効な場合は2文字のパスワードは許されないのでパスワードは間違っていないか確認する。
・saはデフォルトではEngineにはアクセスできるがログオンはできない状態になっている。
ManagementStudioでログイン→saのプロパティ→状態
を確認する。

セキュリティの設定も確認する。
→SQL Serverのセキュリティ構成から、「データベースエンジン」→「ローカル接続およびリモート接続」をオンにします。

[SQLServer] equal to 操作での照合順序の競合を解決できません。

異なるテーブルなどを結合するSQLにおいて
equal to 操作での照合順序の競合を解決できません
というエラーが表示される場合がある。

たとえば
互いに MODEL_IDという varchar列を持つ、TABLE_AとTABLE_Bにおいて

とした場合、普通に問題のないSQLなのだが
TABLE_A が Japanese_Bin
TABLE_B が Japanese_CI_AI_KI
だったりすると、エラーとなる場合がある。
(SQL Serverの照合順序とは文字列の並び替えや比較に関連して出てくるキーワード。
文字の取り扱いが異なる2テーブルのvarchar列を比較するので問題になる。)

一時的には

など、COLLATE句を使用すれば解決するだろう。

本当はテーブル設計とかデータインポートの時に気をつけるべき。

See Also :
Microsoft SQL Server 2000 のインターナショナル機能

[SQLServer] バージョン情報

サーバーのバージョン情報を得る
システムストアドプロシージャ
sp_server_info @attribute_id = 2

[SQLServer] cmd shellコマンドを実行するストアド

master.dbo.xp_cmdshell N'commands for shell'
を使うとコマンドが実行できる。

たとえば

としておいて、
コマンドプロンプト上で

とかやってみると、dirコマンドが実行される。
使いどころはよく考えて使う方が良い。

[SQLServer] ストアドの中身を見る

[sql]
sp_helptext @objname = ‘ストアドの名前’
[/sql]

[SQLServer] SQLServerのオブジェクト一覧いろいろ

以下は SQLServer 2000での情報です。

DBの一覧

[sql]
sp_helpdb

— または、以下でも一応出る
use master
select * from sysdatabases
[/sql]

システムストアドの方が情報がいろいろ結合されて出てくるので見やすい( idがログオンネームに置き換わっていたり)

テーブルの一覧

[sql]
— テーブル
sp_tables

— テーブル以外も出る
select * from sysobjects

— ユーザーテーブルだけ
select * from sysobjects where xtype=\’U\’
[/sql]

列の一覧、キーの一覧

sp_columns
sp_pkeys (主キーのみ?)

列に関しては

[sql]
select sysobjects.name,syscolumns.name,* from sysobjects,syscolumns
where sysobjects.xtype=\’U\’ and sysobjects.id = syscolumns.id
— 必要なら and sysobjects.name = \’tableName\’
order by sysobjets.name, colorder
[/sql]

でも可能

プロシージャの一覧

[sql]
select * from sysobjects where xtype = \’P\’
[/sql]

see also:
プロセス情報の取得

[SQLServer] プロセス情報を取得する

SQLServer 2000

プロセス情報を得るシステムプロシージャ
sp_who

[SQLServer]「sp_executesql」の実行結果を得る

クエリーを実行するストアドプロシージャ 「sp_executesql」の実行結果を得る方法です。

[sql]
— 変数宣言
DECLARE @C int
DECLARE @S int

— 実行
EXEC sp_executesql
N\’SELECT @C = COUNT(qty), @S = SUM(qty) FROM sales\’,
N\’@C int OUTPUT, @S int OUTPUT\’,
@C output, @S output

— 結果出力
SELECT @C [C], @S [S]
[/sql]

使い方

  • 第 1 引数のクエリーでは、変数をそのまま利用できます。
  • 第 2 引数の変数宣言では、変数のデータ型の後に、「OUTPUT」 を指定します。
  • 第 3 引数以降の引き渡す変数の宣言では、変数名の後に「OUTPUT」を指定します。
    Books Online の sp_executesql の部分には、OUTPUT 指定について記載がありませんが、このように使うことができます。