SQL-Konvertierung fehlgeschlagen Fehler

Wenn ich diese gespeicherte Prozedur aufrufe:

ALTER PROCEDURE [dbo].[GetSorted] ( @OrderByColumn nvarchar(256) ) AS SET NOCOUNT ON SELECT itDocs.AddedDate, itDocs.AddedBy FROM itDocs ORDER BY CASE WHEN @OrderByColumn='AddedDate' THEN itDocs.AddedDate WHEN @OrderByColumn='AddedBy' THEN itDocs.AddedBy END ASC 

Ich bekomme Fehler:

Konvertierung fehlgeschlagen beim Konvertieren von date und / oder time aus characterfolge

.

So nenne ich SP:

 DECLARE @return_value int EXEC @return_value = [dbo].[GetSorted] @OrderByColumn = 'AddedBy' SELECT 'Return Value' = @return_value GO 

UPDATE: Wenn ich Multi-Case-Ansatz wie in Faust 2 Antworten vorgeschlagen, bekomme ich Fehler beim Versuch, einen weiteren Fall für die Orientierung hinzugefügt:

  ORDER BY CASE WHEN @OrderDirection=0 THEN CASE WHEN @OrderByColumn='AddedDate' THEN itDocs.AddedDate END ASC, CASE WHEN @OrderByColumn='AddedBy' THEN itDocs.AddedBy END ASC end CASE WHEN @OrderDirection=1 THEN 

   

Hier ist ein guter Artikel, der den Fehler erklärt, den Sie erhalten:

Verwenden von CASE in ORDER BY-Klausel

Sie können Ihre gespeicherte Prozedur auf die folgenden ändern, damit der CASE in der ORDER BY-Klausel funktionieren kann (jetzt bearbeitet, um die Reihenfolge der Reihenfolge als Parameter einzuschließen):

 ALTER PROCEDURE [dbo].[GetSorted] ( @OrderByColumn nvarchar(256), @OrderDirection int ) AS SET NOCOUNT ON SELECT itDocs.AddedDate, itDocs.AddedBy FROM itDocs ORDER BY CASE WHEN @OrderByColumn='AddedDate' AND @OrderDirection=0 THEN itDocs.AddedDate END ASC, CASE WHEN @OrderByColumn='AddedBy' AND @OrderDirection=0 THEN itDocs.AddedBy END ASC, CASE WHEN @OrderByColumn='AddedDate' AND @OrderDirection=1 THEN itDocs.AddedDate END DESC, CASE WHEN @OrderByColumn='AddedBy' AND @OrderDirection=1 THEN itDocs.AddedBy END DESC 

Sie versuchen, datatypen zu konvertieren und datetime hat eine höhere Priorität. Grundsätzlich "AddedBy = 'bob'" kann nicht konvertiert werden …

 SELECT itDocs.AddedDate, itDocs.AddedBy FROM itDocs ORDER BY CASE OrderByColumn WHEN 'AddedDate' THEN itDocs.AddedDate ELSE '19000101' END, CASE OrderByColumn WHEN 'AddedBy' THEN itDocs.AddedBy ELSE '' END