ストアド プロシージャで C# の DateTime と SQL サーバーの DateTime を比較しようとしていますが、変換エラーが発生し続けます。
最初は、他の誰かがこのために Oracle 関数を作成しました。
'Select blabla from bla WHERE (TO_DATE (''' + cast(@dateEnd as varchar(50)) + ''',''yyyy/mm/dd'') >= SPOT_ENDDAT)
これを SQL に変更しようとしていますが、SQL には TO_DATE 関数がありません。
何か案は?それとも、.net プログラム自体のレベルで変更を加える必要がありますか? はいの場合、どうすればよいですか?
編集:
このパラメーターを使用して関数ストアド プロシージャを呼び出す:
DateTime EndDate = DateTime.Today;
ParamList.Add(new <class>.Parameter("EndDate", ParameterDirection.Input, EndDate, DbType.Date));
ストアド プロシージャ:
ALTER PROCEDURE dbo.uspGetValues
@EndDate = null;
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL as NVARCHAR(4000)
Set @SQL = 'SELECT * FROM T_SPOTSHOP_DATA WHERE SPOT_ENDDATE IS NOT NULL'
if(@EndDate is not null)
Set @SQL = @SQL + 'AND (' + @EndDate +' <= SPOT_ENDDATE'
EXEC(@SQL)
ソリューションの編集:
同じ問題を抱えている人のために、逆に修正しました。C#では、次を使用します:
DateTime EndDate = DateTime.Today.toString(yyyy-MM-dd);
ParamList.Add(new <class>.Parameter("EndDate", ParameterDirection.Input, EndDate, DbType.Date));
そして、ストアドプロシージャで次のようにキャッチします。
EndDate Varchar(50)
SET @SQL = @SQL + 'WHERE CONVERT(DATETIME, '''+ @EndDate +''', 121) >= SPOT_ENDDATE
それを行うのはかなり醜い方法ですが、うまくいきます。皆さんのお役に立てば幸いです。