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

SQL Server 2008 ですべての列名に ISNULL を使用するにはどうすればよいですか?

    異なる列に対して同じ SQL ステートメントで ISNULL を複数回使用できますが、列ごとに個別に記述する必要があります。

    SELECT
        ISNULL(ProductName, 'No Data') AS ProductName,
        ISNULL(CAST(UnitPrice AS NVARCHAR), 'No Data') AS UnitPrice, 
        ISNULL(CAST(UnitsInStock AS NVARCHAR), 'No Data') AS UnitsInStock,
        ISNULL(CAST(UnitsOnOrder AS NVARCHAR), 'No Data') AS UnitsOnOrder
    FROM tbl
      

    動的 SQL クエリを作成している場合、理論的には、テーブル内の列のリストを収集し、それぞれに ISNULL を使用してクエリを生成できます。例:

    DECLARE @SQL nvarchar(max)
    
    SET @SQL = 'SELECT '
    
    SELECT @SQL = @SQL + 'ISNULL(CAST([' + sc.name + '] AS NVARCHAR), ''No Data'') AS [' + sc.name + '],'
    FROM sys.objects so
    INNER JOIN sys.columns sc ON sc.object_id = so.object_id
    WHERE so.name = 'tbl'
    
    -- Remove the trailing comma
    SELECT @SQL = LEFT(@SQL, LEN(@SQL) - 1) + ' FROM tbl'
    
    EXEC sp_sqlexec @SQL
      

    このコードは、タイムスタンプなどの一部の列タイプを nvarchar に変換する際に問題がありますが、手法を示しています。

    値が null の場合に返される別の列がある場合は、 合体 このような表現:

    SELECT COALESCE(ProductName, P_Id) AS Product...
      

    1. ORA-00933内部結合およびasとの混同

    2. 外部HDを使用してmysqlデータベースに書き込み、保存する

    3. MySQL固有のクエリを内部で使用するコードをテストする適切な方法は何ですか

    4. タイトルとして電子メールアドレスを使用してSQLテーブルを作成する