1
C# 프로그램에서 SQL Server 2012 Express의 저장 프로 시저를 호출하여 DateTime 데이터 형식을 열 (datetime 임)에 삽입하려고합니다.datetime 필드에 날짜 시간 삽입 TSQL
어떤 이유에서든 "날짜 및/또는 시간을 문자열로 변환 할 때 대화가 실패했습니다."라는 오류가 계속 발생합니다.
SQL 서버에서 culture 설정을 확인했습니다.이 설정은 us_english로 설정되어 있지만 datetime 형식은 ISO 표준입니다.
다음은 저장 프로 시저의 코드입니다. 값은 C# 응용 프로그램에서 전달한 값과 같습니다.
USE testdb;
DECLARE @Name NVARCHAR(50) = 'Somename',
@Location NVARCHAR(50) = 'somelocation',
@Date DateTime = '2013-10-11 11:00:05.000'
BEGIN
SET NOCOUNT ON;
SELECT @Name, @Location, @Date
if exists (select name from ComputerHistory where name = @Name)
begin
DECLARE @Query1 NVARCHAR(MAX)
if @Location <> 'disconnected'
begin
set @Query1 = '
update ComputerHistory
set ' + @Location + ' = 1 + ISNULL((select MAX(' + @Location + ') from ComputerHistory where name = ''' + @Name + '''),0),
lastdateonline = ''' + @Date + '''
where name = ''' + @Name + '''
'
--EXEC sp_executesql @Query1
end
else
begin
set @Query1 = '
update ComputerHistory
set ' + @Location + ' = 1 + ISNULL((select MAX(' + @Location + ') from ComputerHistory where name = ''' + @Name + '''),0)
where name = ''' + @Name + '''
'
EXEC sp_executesql @Query1
end
end
else
begin
DECLARE @Query2 NVARCHAR(150)
set @Query2 = 'insert into ComputerHistory(name, ' + @Location + ') VALUES(''' + @Name + ''', ''1'')'
EXEC sp_executesql @Query2
end
END
작동합니다 그. SQL Server가 암시 적 캐스트에서 올바른 유형을 적용하지 않는 것 같습니다. 코드'declare @date datetime = '2013-10-11 11 : 00 : 05.000'; '날짜 선택 :'+ @ date'은'declare @date datetime = '2013-10-11 11 : 00 : 05.000'; '날짜는 :'+ convert (nchar (25), @date)'를 선택하십시오. – Ricardo
감사! 매력처럼 작동합니다! – rdem
이 코드는 문자열을 작성합니다 (동적 SQL의 경우). sql이 다른 데이터 유형을 결합 할 때마다 데이터 유형 우선 순위를 사용합니다. 여기에 문서 : http://technet.microsoft.com/en-us/library/ms190309.aspx이 경우에는 문자열과 datetime이 있습니다. SQL은 문자열을 다른 방법 대신 datetime으로 변환하려고 시도합니다. –