iT邦幫忙

0

關於T-SQL Store Procedure 日期欄位比較數值問題

你好,我的作業環境是 MS-SQL SERVER 2008 R2

我的 Store Procedure 如下:

create table #result (Id nvarchar(24),Name nvarchar(24),ItemClassDid nvarchar(24),
					  Did char(24),CreateDateTime datetime,CreateUserDid nvarchar(24),
					  UpdateDateTime datetime,UpdateUserDid nvarchar(24),Memo text
				     );
				     
declare @sqlStr nvarchar(255)
set @sqlStr='insert into #result(Id,Name,ItemClassDid,Did,CreateDateTime,CreateUserDid,UpdateDateTime,UpdateUserDid,Memo) '+
			'select Id,Name,ItemClassDid,Did,CreateDateTime,CreateUserDid,UpdateDateTime,UpdateUserDid,Memo '+
			'from ST_RawMaterial '+
			'where '+
			'CreateDateTime=''2013-11-19 17:20:06.667'''
			;
				
exec(@sqlStr);
drop table #result;

我這一段程式碼的問題出在於,只要放上 'insert into #result' 那一行就會發生以下錯誤訊息:

訊息 105,層級 15,狀態 1,行 1
遺漏字元字串 '2013-11-1' 後面的引號。
訊息 102,層級 15,狀態 1,行 1
接近 '2013-11-1' 之處的語法不正確。

如果不放上 'insert into #result' 那一行,就可以正常顯示 CreateDateTime 欄位值為 "2013-11-19 17:20:06.667" 的資料列。

有人知道問題出在哪嗎?

感謝回覆。

2 個回答

10
77012904
iT邦新手 3 級 ‧ 2013-11-20 22:21:52
最佳解答

檢查一下你 @sqlStr 這個東西設的長度吧... 很明顯就是字串太常被切掉

8
summertw
iT邦好手 1 級 ‧ 2013-11-21 08:28:04

declare @sqlStr nvarchar(255)
set @sqlStr='insert into #result(Id,Name,ItemClassDid,Did,CreateDateTime,CreateUserDid,UpdateDateTime,Upda...(恕刪)

是否改成下列方式
set @sqlStr='insert into #result(Id,Name,ItemClassDid,Did,CreateDateTime,CreateUserDid,UpdateDateTime,UpdateUserDid,Memo) '+
'select Id,Name,ItemClassDid,Did,CreateDateTime,CreateUserDid,UpdateDateTime,UpdateUserDid,Memo '+
'from ST_RawMaterial '+
'where '+
'CreateDateTime=Convert(DateTime,''2013-11-19 17:20:06.667'')'

我要發表回答

立即登入回答