sql >> データベース >  >> RDS >> Sqlserver

データ長を含む拡張 TYPE_NAME 関数

    大まかなスタートは次のようになります:

    CREATE FUNCTION udf_GetDataTypeAsString
        (
          @user_type_id INT ,
          @Length INT
        )
    RETURNS VARCHAR(50)
    AS 
        BEGIN
            DECLARE @ReturnStr VARCHAR(50)
    
            IF @Length = -1 
                SELECT  @ReturnStr = UPPER(name) + '(MAX)'
                FROM    sys.types
                WHERE   user_type_id = @user_type_id
            ELSE 
                SELECT  @ReturnStr = UPPER(name) + '(' + CONVERT(VARCHAR, @Length) + ')'
                FROM    sys.types
                WHERE   user_type_id = @user_type_id
    
            RETURN @ReturnStr
    
        END
    GO
    
    SELECT dbo.udf_GetDataTypeAsString(167, -1)
    --#### Returns VARCHAR(MAX)
    SELECT dbo.udf_GetDataTypeAsString(231, 24)
    --#### Returns NVARCHAR(24)
    

    これは char データ型にのみ有効であり、長さのみを処理することに注意してください。精度 (10 進数など) を使用する場合は、もう少しロジックを実装する必要があります。

    また、特定のユーザー タイプで長さ -1 のみを許可するように検証を追加することもできます

    (好奇心のために、なぜこれをしたいのですか?)



    1. Oracle SQL-RANK()またはDENSE_RANK()またはROW_NUMBER()分析関数を使用して個別の行を取得する方法は?

    2. CakePHP:ACLの設定が機能しない(テーブルが更新されない)ことを許可/拒否しますか?

    3. 変数宣言でのMySQL構文エラー

    4. MySQLで重複を見つける方法