ラベル T-SQL の投稿を表示しています。 すべての投稿を表示
ラベル T-SQL の投稿を表示しています。 すべての投稿を表示

2025年5月9日金曜日

SQL Serverのテーブル or ビューの定義から C#のデータアクセス用classを作成 revision2

 SQL Serverのテーブル or ビューの定義から C#のデータアクセス用classを作成 revision2

T-SQLのREAL項目を追加

 

 SELECT 'public ' +
      CASE
      WHEN UPPER(DATA_TYPE) IN ('INT')      THEN 'int'
      WHEN UPPER(DATA_TYPE) IN ('SMALLINT') THEN 'short'
      WHEN UPPER(DATA_TYPE) IN ('FLOAT')    THEN 'double'
      WHEN UPPER(DATA_TYPE) IN ('REAL')     THEN 'float'
      WHEN UPPER(DATA_TYPE) IN ('TINYINT')  THEN 'sbyte'
      WHEN UPPER(DATA_TYPE) IN ('BIT')      THEN 'bool'
      WHEN UPPER(DATA_TYPE) IN ('DATE','DATETIME')  THEN 'DateTime'
      WHEN UPPER(DATA_TYPE) IN ('CHAR','NCHAR','VARCHAR','NVARCHAR','TEXT','NTEXT') THEN 'string'
      ELSE 'xx' END +
      CASE WHEN IS_NULLABLE = 'NO' THEN ' ' ELSE '?' END +
      COLUMN_NAME +
      ' { get; set; }'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
ORDER BY ORDINAL_POSITION


最後に CHAR(13)があって、余分な改行を削除しました

2025年5月1日木曜日

SQL Serverのテーブル or ビューの定義から C#のデータアクセス用classを作成

 T-SQLで作成

 

--ここからC#用classを作成
DECLARE @TableName VARCHAR(30)

SET @TableName = 'dummytable'

SELECT 'public ' +
      CASE
      WHEN UPPER(DATA_TYPE) IN ('INT')      THEN 'int'
      WHEN UPPER(DATA_TYPE) IN ('SMALLINT') THEN 'short'
      WHEN UPPER(DATA_TYPE) IN ('FLOAT')    THEN 'double'
      WHEN UPPER(DATA_TYPE) IN ('TINYINT')  THEN 'sbyte'
      WHEN UPPER(DATA_TYPE) IN ('BIT')      THEN 'bool'
      WHEN UPPER(DATA_TYPE) IN ('DATE','DATETIME')  THEN 'DateTime'
      WHEN UPPER(DATA_TYPE) IN ('CHAR','NCHAR','VARCHAR','NVARCHAR','TEXT','NTEXT') THEN 'string'
      ELSE 'xx' END +
      CASE WHEN IS_NULLABLE = 'NO' THEN ' ' ELSE '?' END +
      COLUMN_NAME +
      ' { get; set; }' + CHAR(13)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
ORDER BY ORDINAL_POSITION
 

100近い項目の変換が面倒になった

2021年11月16日火曜日

T-SQL Mergeのサンプル

 T-SQL Mergeのサンプル


MERGE INTO test_table AS A
    USING (SELECT 10 AS no,'太郎さん' AS name, 30 AS age ) AS B
    ON
    (
       A.no = B.no
    )
    WHEN MATCHED THEN
        UPDATE SET
             name = B.name
            ,age = B.age
    WHEN NOT MATCHED THEN
        INSERT (no,name,age)
        VALUES
        (
             B.no
            ,B.name
            ,B.age
        )

元ネタ https://lightgauge.net/database/sqlserver/2446/

2016年10月28日金曜日

MS-SQL 漢字を含む文字列の分割

SQL-Serverが全角文字を最後の一文字で断ち割った時は、指定バイト数よりも1バイト欠損するという性質を利用して、判定に使います。 ALTER VIEW [dbo].[v最近商品一覧] (得意先CD, 出荷年月日, 出荷伝票番号, 行番号, 商品CD, 商品名, 商品名1, 商品名2, 補足, 数量, 単価, 金額 ) AS SELECT [得意先CD] ,[出荷年月日] ,[出荷伝票番号] ,[行番号] ,[商品CD] ,[商品名] ,SUBSTRING(CAST(RTRIM(LTRIM([商品名])) AS TEXT),1,20) ,CASE WHEN DATALENGTH(SUBSTRING(CAST(RTRIM(LTRIM([商品名])) AS TEXT),1,20)) < 20 THEN SUBSTRING(CAST(RTRIM(LTRIM([商品名])) AS TEXT),20,21) ELSE SUBSTRING(CAST(RTRIM(LTRIM([商品名])) AS TEXT),21,20) END ,[補足] ,[数量] ,[単価] ,[金額] FROM dbo.e_KAKOSR_DAT AS D1

2014年12月11日木曜日

SQL Serverで数値の 9 を文字列 '09' にフォーマットする

SQL Serverで数値の 9 を文字列 '09' にフォーマットする

Transact-SQL にはこれをする関数がないらしい。
なので、RIGHTとCONVERTを組み合わせるのだそうだ。
select right('00' + convert(varchar, 9), 2)