日期:2014-05-20  浏览次数:20924 次

帮我看看我的SQL语句
CREATE PROCEDURE UPLOAD_YESTERDAY_DATA
@YESTERDAY datetime  =getdate,
@TABLENAME VARCHAR(100)='ddd',
@ITEMNAME VARCHAR(100)
AS 
print @YESTERDAY
DECLARE @VSQL1  varchar(2000) ,@VSQL2  varchar(2000)
BEGIN
SET @VSQL1='INSERT INTO [dbo].['+@TABLENAME+']  SELECT* FROM [dbo].[TODAY'+@TABLENAME+'] WHERE  ['+@ITEMNAME+'] < '''+ convert(varchar(10),getdate(),120)+' 00:00:00'''
SET @VSQL2='DELETE FROM [dbo].[TODAY'+@TABLENAME++'] WHERE  ['+@ITEMNAME+'] < '''+ convert(varchar(10),getdate(),120)+' 00:00:00'''
EXEC  (@VSQL1)
EXEC  (@VSQL2)
END

GO
EXEC UPLOAD_YESTERDAY_DATA  @TABLENAME='检测结果二',@ITEMNAME='检测时间'

执行的报错 从字符串转换为 datetime 时发生语法错误。

从字符串转换为 datetime 时发生语法错误。
改成这样也不行,直接语法检查就通不过 奇怪。
@YESTERDAY datetime  =getdate(),
------最佳解决方案--------------------
 EXEC UPLOAD_YESTERDAY_DATA getdate(),'检测结果二','检测时间'
------其他解决方案--------------------
我设定默认值就是为了可以不要传这个参数也可以,我刚刚得到答案是,默认值中不可以使用函数只能用常量表示,所以不对。