sql >> Databasteknik >  >> RDS >> Sqlserver

Distinkt fel med bildfält

Bilddatatyper i en SELECT-sats som innehåller DISTINCT-satsen. Beroende på vilken version av SQL Server som används finns det några sätt att övervinna denna begränsning.

För SQL Server 2000 kan en TEXT-kolumn konverteras till en VARCHAR-datatyp, en NTEXT-kolumn kan konverteras till en NVARCHAR-datatyp medan en IMAGE-datatyp kan konverteras till VARBINARY-datatyp. SELECT-satserna tidigare som innehåller DISTINCT-satsen kan skrivas om enligt följande och undviker felmeddelandet:

SELECT DISTINCT [BookTitle], CAST([BookSummary] AS NVARCHAR(4000)) AS [BookSummary]FRÅN [dbo].[Book]

SELECT DISTINCT [BookTitle], CAST([BookImage] AS VARBINARY(8000)) AS [BookImage]FRÅN [dbo].[Book]För SQL Server 2005 och SQL Server 2008 (och senare), istället för att begränsa NVARCHAR till 4000 tecken eller VARCHAR eller VARBINARY till 8000 tecken, kan MAX-specifikationen användas i dess ställe, vilket kan ses i följande SELECT-satser:

VÄLJ DISTINCT [BookTitle], CAST([BookSummary] AS NVARCHAR(MAX)) AS [BookSummary]FRÅN [dbo].[Bok]

VÄLJ DISTINCT [BookTitle], CAST([BookImage] AS VARBINARY(MAX)) AS [BookImage]FRÅN [dbo].[Book]Om du använder SQL Server 2005 eller SQL Server 2008 (eller senare), ett annat sätt att övervinna denna begränsning och detta felmeddelande utan att använda CAST- eller CONVERT-funktionen för att konvertera text-, ntext- och bilddatatyperna till varchar, nvarchar respektive varbinary, är att ändra kolumnernas datatyper till VARCHAR(MAX), NVARCHAR(MAX) och VARBINARY (MAX). Datatyperna TEXT, NTEXT och IMAGE kommer att tas bort i en framtida version av Microsoft SQL Server och användning av dessa datatyper bör undvikas.

Referens:http://www.sql-server-helper .com/error-messages/msg-421.aspx




  1. Hur ställer du in Incemental till true för flera tabeller med samma ägare med DBMS_STATS.set_table_prefs?

  2. När du frågar mot en vy ignoreras en filtreringssats i vyns definition

  3. Konvertera tidsstämpel till ett läsbart datum under förfrågan

  4. Att använda select i ANDET i en CASE-sats ger mig ORA-00937:inte en gruppfunktion med en enda grupp