1
我想從C#程序中調用SQL Server 2012 Express中的存儲過程以將DateTime數據類型插入列(也是日期時間)。將日期時間插入日期時間字段TSQL
出於某種原因,我不斷收到有關「通過字符串轉換日期和/或時間時會話失敗」的錯誤。
我已經檢查了我的SQL服務器的文化設置,它設置爲us_english,但日期時間格式是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 is:'+ @ date' does not work while'declare @date datetime ='2013-10-11 11:00:05.000';選擇'Date is:'+ convert(nchar(25),@date)'作品。 – Ricardo
謝謝!奇蹟般有效! – rdem
此代碼正在構建一個字符串(用於動態SQL)。每當sql組合不同的數據類型時,它都會使用數據類型優先級來執行此操作。這裏的文檔:http://technet.microsoft.com/en-us/library/ms190309.aspx在這種情況下,有一個字符串和一個日期時間。 SQL嘗試將字符串轉換爲日期時間而不是其他方式。 –