没有,上面已经说了,若去掉exec sp_executesql @strSQL,则select @strSQL的结果为: update NC_Article set HitsTime='03 5 2007 3:11PM' where ArticleID=161这条SQL语句可以正常执行
update NC_Article set HitsTime='03 5 2007 3:11PM' where ArticleID=161這句可以執行?
Create Table NC_Article (ArticleID Int, HitsTime DateTime) Insert NC_Article Select 161, '2007-02-01' GO declare @nowTime datetime declare @strWhere Nvarchar(200) declare @strSQL Nvarchar(200) set @nowTime=GetDate() set @strWhere= N'ArticleID=161' set @strSQL = N'update NC_Article set HitsTime='''+ cast(@nowTime as varchar(20)) + ''' where '+ @strWhere --select @strSQL exec sp_executesql @strSQL GO Select * From NC_Article GO Drop Table NC_Article --Result /* ArticleID HitsTime 161 2007-03-05 15:32:00.000 */ 我測試了下,一點問題都沒有的。你的這段代碼和你的那條SQL語句是在查詢分析器中同一個頁面下測試的嗎?感覺是你的數據庫沒有選擇正確引起的。
將 set @strSQL = N'update NC_Article set HitsTime='''+ cast(@nowTime as varchar(20)) + ''' where '+ @strWhere 改為 set @strSQL = N'update NC_Article set HitsTime='''+ Convert(Varchar, @nowTime, 120) + ''' where '+ @strWhere 試試看
declare @strWhere varchar(200)
declare @strSQL varchar(200)
set @nowTime=GetDate()
set @strWhere= 'ArticleID=161'
set @strSQL = 'update NC_Article set HitsTime='''+ cast(@nowTime as varchar(20)) + ''' where '+ @strWhere
select @strSQL
exec sp_executesql @strSQL会报错如下:
(所影响的行数为 1 行)服务器: 消息 214,级别 16,状态 2,过程 sp_executesql,行 8
过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。若去掉exec sp_executesql @strSQL,则select @strSQL的结果为:
update NC_Article set HitsTime='03 5 2007 2:49PM' where ArticleID=161是时间格式不对吧?
declare @strWhere Nvarchar(200)
declare @strSQL Nvarchar(200)
set @nowTime=GetDate()
set @strWhere= N'ArticleID=161'
set @strSQL = N'update NC_Article set HitsTime='''+ cast(@nowTime as varchar(20)) + ''' where '+ @strWhere
select @strSQL
exec sp_executesql @strSQL
对象名 'NC_Article' 无效。若去掉exec sp_executesql @strSQL,则select @strSQL的结果为:
update NC_Article set HitsTime='03 5 2007 3:11PM' where ArticleID=161这条SQL语句可以正常执行
2.你的表名有沒有寫錯。
update NC_Article set HitsTime='03 5 2007 3:11PM' where ArticleID=161这条SQL语句可以正常执行
(ArticleID Int,
HitsTime DateTime)
Insert NC_Article Select 161, '2007-02-01'
GO
declare @nowTime datetime
declare @strWhere Nvarchar(200)
declare @strSQL Nvarchar(200)
set @nowTime=GetDate()
set @strWhere= N'ArticleID=161'
set @strSQL = N'update NC_Article set HitsTime='''+ cast(@nowTime as varchar(20)) + ''' where '+ @strWhere
--select @strSQL
exec sp_executesql @strSQL
GO
Select * From NC_Article
GO
Drop Table NC_Article
--Result
/*
ArticleID HitsTime
161 2007-03-05 15:32:00.000
*/
我測試了下,一點問題都沒有的。你的這段代碼和你的那條SQL語句是在查詢分析器中同一個頁面下測試的嗎?感覺是你的數據庫沒有選擇正確引起的。
set @strSQL = N'update NC_Article set HitsTime='''+ cast(@nowTime as varchar(20)) + ''' where '+ @strWhere
改為
set @strSQL = N'update NC_Article set HitsTime='''+ Convert(Varchar, @nowTime, 120) + ''' where '+ @strWhere
試試看