SQL Server タイムアウト関連の設定

1. 接続のタイムアウト ADO
  SqlConnection.ConnectionTimeout プロパティー (ADO.Net)
  規定値15秒
  0は制限無し.

  このプロパティーはReadOnlyなので設定はできない.
  設定はConnectionStringで接続時におこなう.

  例:
  ConnectionString = “Data Source=(local);Database=test;Integrated Security=SSPI;Connection Timeout=30;”

参考:
SqlConnection.ConnectionString プロパティ (MSDN)

  このConnectionTimeoutは接続のタイムアウトなので,コマンド実行のタイムアウトとは関係ない.
コマンド実行のタイムアウトは↓.


2. クエリー(コマンド実行)のタイムアウト ADO
  SqlCommand.CommandTimeout プロパティー (ADO.Net)
  規定値30秒
  0は制限無し.

  例:
  cmd.CommandTimeout = 60

  Excel VBAでは,ADODB.CommandのCommandTimeoutプロパティー


3. SQL Server Management Studio でテーブルのデザインを変更したときのタイムアウト
  [ツール]-[オプション]-[デザイナ]-[テーブルおよびデーターベースデザイナ]-[トランザクションがタイムアウトするまでの時間] で設定する.
  規定値30秒

参考:
http://support.microsoft.com/kb/915849/ja

SQL Server ユーザー定義関数(3) スカラー値関数

ユーザー定義関数 その3

— =============================================
— スカラー値関数 (データーを1つだけ返す)
— =============================================
CREATE FUNCTION fn_Test3
(
    @a1 int
)
RETURNS int
AS
BEGIN
    DECLARE @Result int

    SELECT @Result = b1 FROM Table1 WHERE ID = @a1

    RETURN @Result

END
GO


使い方

Declare @b1 int

1.パラメーター名指定 (順不同)

    EXEC @b1 = fn_Test3 @a1 = 1

2.パラメーター名を指定しない (順序は定義に合わせる)

    EXEC @b1 = fn_Test3 1

3.クエリーで使用

    SELECT c1, dbo.fn_Test3(ID) AS col1
        FROM Table1

    なぜか
   
SELECT c1, fn_Test3(ID) AS col1
        FROM Table1
   
ではダメでスキーマ名を指定する必要がある.

参考:
ユーザー定義関数 (MSDN)

SQL Server ユーザー定義関数(2) 複数ステートメントのテーブル値関数

ユーザー定義関数 その2

— =============================================
— 複数ステートメントのテーブル値関数
— =============================================

CREATE FUNCTION fn_Test2
(
    @a1 int
)
RETURNS @retT TABLE
(
       — テーブル値の定義
        ID int primary key NOT NULL
    ,    b1 nvarchar(250)
)
AS
BEGIN

    WITH T1(ID1, Name1) AS
    (
        SELECT ID1, Name1 FROM Table1 WHERE ID2 = @a1
        UNION ALL   
        SELECT ID1, Name1 FROM Table2 WHERE ID3 = @a1
    )

    — @retT にデーターを入れて返す
    INSERT INTO @retT
        SELECT ID1_ID, Name1 FROM T1

    RETURN

END
GO


使い方

SELECT * FROM fn_Test2(1) –カッコの中にパラメーター値を入れる

参考:
ユーザー定義関数 (MSDN)