Fehler beim Konvertieren des datatyps varchar in SQL server 2008 R2

Ich habe das date zu überprüfen wie unten gezeigt:

Eingabedatum:

17-09-2014 

Für die ich in meinem dynamischen Skript umwandle:

Versuch # 1:

  CAST((convert(date,@FDate, 105)) AS nvarchar(50)) 

Fehler:

Fehler beim Umwandeln des datatyps varchar.

Versuch # 2:

  convert(date, @FDate, 105) 

Fehler:

Die datatypen nvarchar und date sind im Add-Operator nicht kompatibel.

Versuch # 3:

  cast(@FDate as varchar(50)) 

Fehler:

Fehler beim Umwandeln des datatyps varchar.

Ein ganzer Versuch, genommen von der sqlfiddle.com/#!3/d41d8/38976 der Kommentare:

 DECLARE @querys NVARCHAR(max) DECLARE @Date DATE SET @Date = '17-09-2014' SET @querys = 'SELECT' + CAST((convert(date,@Date, 105)) AS nvarchar(50)) + '' EXEC(@querys) 

Versuchen

 convert(Datetime, @FDate,105) 

Ich habe versucht, Skript und es funktionierte gut für SQL server 2005 und SQL server 2012:

 Declare @FDate varchar(100); set @FDate='17-09-2014'; Select convert(Varchar(50), convert(Datetime, @FDate,105) ,105) 

Verifiziert Ihr Geige-Skript, hatte nur kleine Veränderung und es funktionierte wie erwartet.

Hier ist ein neues Skript, das ich auf Geige getestet habe:

 DECLARE @qs VARCHAR(max) Declare @FsDate varchar(100) set @FsDate = '17-09-2014' SET @qs = 'Select convert(Varchar(50), convert(Datetime, '''+@FsDate+''',105) ,105) ' EXEC(@qs) 

Versuche es so!

 declare @a varchar(50) set @a='17-09-2014' select cast( right(@a,4)+'-'+SUBSTRING(@a,4,2)+'-'+LEFT(@a,2) as date) 

FIDDLE DEMO

Es scheint eine gewisse Verwirrung mit Convert zu geben . Vergleichen Sie Ihre Fiddels aus den Kommentaren und den angezeigten Versuchen. Ihre Fiddels zeigen DECLARE @Date DATE ; Das erste Argument ist der Zieltyp (Versuch # 1), da dein @FDate bereits vom Typ DATE convert(date,@FDate, 105) wird zu einer Umwandlung von DATE zu DATE führen, deine äußere Besetzung zu nvarchar scheint nicht zu arbeiten zu deinen Schauplätzen. (Versuch # 2) wird unvollständig angezeigt, da der gezeigte Teil convert(date, @FDate, 105) funktioniert, auch wenn es nichts ändert (Umwandlung von DATE zu DATE)
(Versuch # 3) scheint nicht zu arbeiten aufgrund Ihrer Locales.

Ihre gezeigte Geige:

 DECLARE @querys NVARCHAR(max) DECLARE @Date DATE SET @Date = '17-09-2014' SET @querys = 'SELECT' + CAST((convert(date,@Date, 105)) AS nvarchar(50)) + '' EXEC(@querys) 

ist bereits hier fehlgeschlagen SET @Date = '17-09-2014' , ein Sicherungsweg, der von Locales unabhängig ist, wäre, das Format YYYYMMDD SET @Date = '20140917' . Da du versuchst, ein Varchar zu build dein Zielsystem für CONVERT würde von VARCHAR nicht DATE und du wuold haben, um Anführungszeichen hinzuzufügen, ein einfaches PRINT @querys oder SELECT @querys würde zeigen, was du ausführen willst.

Genommen von deiner Geige, versuchst du, ein date zu einem Varchar zu konvertieren und es dann zu einem dynamischen SQL hinzuzufügen, das du ausführen möchtest, also ein path zu gehen wäre:

 DECLARE @querys NVARCHAR(max) DECLARE @Date DATE SET @Date = '20140917' -- get it as varchar --SET @querys = ' SELECT ''' + convert(varchar(20),@Date,105) + '''' --get it as date SET @querys = ' SELECT convert(date,''' + convert(varchar(20),@Date,105) + ''',105)' EXEC(@querys)