12

質問があります

私はgoogleそれを試してみましたが、彼らは好きではないようです*

SQL Server 2008 を使用しています。

次のデータベーステーブルがあります。

 P_Id   ProductName UnitPrice   UnitsInStock    UnitsOnOrder
------------------------------------------------------------------------
   1    Jarlsberg   10.45                 16    15
   2    Mascarpone  Null                  23    NULL 
   3    Gorgonzola  15.67                  9    20

を文字列に置き換える必要がある場合は、null次のことを知っています。

 SELECT ISNULL(UnitsOnOrder,'No Data') FROM tbl

質問

  • ISNULL()複数列の名前を使用するにはどうすればよいですか?
  • それを使用することは可能ですか*

お気に入り

SELECT ISNULL(* , 'NO data') FROM tbl 

データ型のためにこれは難しいと思います。文字列をINTデータ型に渡すことはできません。どうすればこれを修正できますか

アップデート

ISNULL() をデータ型で使用すると、値intが返さ0 れますが、代わりに空の文字列を渡すにはどうすればよいですか?

4

2 に答える 2

17

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

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 の場合に返される別の列がある場合は、次のようにCOALESCE式を使用できることに注意してください。

SELECT COALESCE(ProductName, P_Id) AS Product...
于 2012-11-05T18:06:52.950 に答える
2

これを試して...

ISNULL (COALESCE (column1, column2), 'No Data')

ただし、すべての列名を含める必要がありますが、* は使用できません

COALESCE は引数リストの最初の非 null 値を返すため、それらがすべて null の場合は null を返します

于 2012-11-05T18:42:13.603 に答える