2017-08-21 1 views
0

Mit diesem Code ich diesen Fehler hätte:Tsql Operand-Typenkonflikt: Datum ist nicht kompatibel mit int

"Operand type clash: date is incompatible with int"

declare 
    @StrSql nvarchar(max), 
    @TableName nvarchar(50), 
    @Month datetime 
set 
    @TableName = 'dbo.OneTransfer' 
set 
    @month ='2016-02-02' 
set 
    @StrSql ='select * from ' + @TableName + ' where OperateDate >=' + CONVERT(char(10),@Month,20) 
execute (@StrSql) 

Das ist meine SQL-Tabelle:

enter image description here

+0

nicht einen solchen Code schreiben Sie. Verwenden Sie parametrisierte Abfragen. Durch die Verkettung von Strings werden Sie SQL-Injection-Angriffen ausgesetzt. Konvertierungsfehler wie dieser * und * verhindern, dass Unicode-Daten - wie chinesische Zeichen - übergeben werden. Verwenden Sie 'Select * aus meiner Tabelle, wo OperateDate> = @ Datum 'und verwenden Sie' sp_executesql, um den Date-Parameter übergeben –

Antwort

0

Hier ist dein Fehler :

set @StrSql ='select * from ' + @TableName + ' where OperateDate >=' + CONVERT(char(10),@Month,20) 

Probieren Sie es aus drucken, wird es Ihnen zeigen Unquoted Datum Zeichenfolge

where OperateDate >= 2016-02-02 

So OperateDate >= 2016 es ist, den Fehler zu verursachen.

Was Sie brauchen, ist stattdessen zu QUOTEyour Datum string:

set @StrSql ='select * from ' + @TableName + ' where OperateDate >=' + quotename(CONVERT(char(10),@Month,20), '''') 
+0

Vielen Dank Ihre Zeit. Es ist Arbeit. Sehr deutlich. Ich schätze wirklich. –

Verwandte Themen