又是存储过程~~~~~~~~~~来

来源:百度知道 编辑:UC知道 时间:2024/05/30 01:55:30
创建存储过程如下:(创建成功)
use reports
go
create proc [dbo].[analyze_copy]
@listcode varchar(50),
@reportdate datetime
as
DECLARE @SqlString nvarchar(1000)
Set @SqlString='insert into analyze_compare_profit select * from' + @listcode + 'where report_date='+@reportdate
execute sp_executesql @SqlString
执行如下:
exec analyze_copy
@listcode='sz000527_profit',
@reportdate='2007-09-30'
执行结果失败:
消息 241,级别 16,状态 1,过程 analyze_copy,第 6 行
从字符串向 datetime 转换时失败。

report_date为表sz000527_profit存在的字段,类型为smalldatetime.告诉我怎么改!!
执行失败:
消息 102,级别 15,状态 1,第 1 行
'fromsz000527_profitwhere' 附近有语法错误。

@REPORTDATE DATETIME参数怎么解释,有没有存储过程方面的资料推荐一下?
=======================
是很有用啊,可是执行失败,高手再研究一下.
=======
为什么错的总是我???
成功了,谢谢!请推荐点存储过程方面的资料.

这样改就行了,请注意大写字母的语句
create proc [dbo].[analyze_copy]
@listcode varchar(50),
@reportdate datetime
as
declare @sqlstring nvarchar(1000)
set @sqlstring='insert into analyze_compare_profit select * from ' + @listcode + ' where --前面加空格,再试一下
REPORT_DATE=@REPORTDATE '
execute sp_executesql @SqlString,N'@REPORTDATE DATETIME',@REPORTDATE
================
@REPORTDATE DATETIME,就象你建立的常规的存储过程一样,他是给这个特殊的存储过程的参数变量。而后面的@REPORTDATE是执行特殊存储过程时给出的参数值。
这就是带参数的SP_EXECUTESQL的用法,很有用的。
======
这是你原语句就有的错误,请在WHERE前面加空格。还有,FROM后面也要加空格