ALTER PROCEDURE [dbo].[PROC_CRM_XH_Allot]
@CREATEDATESTARTTIME DATETIME,
@CREATEDATEENDTIME DATETIME
AS
begin
declare
@temptablename varchar(100),
@sql varchar(4000),@startdate varchar(20),@enddate varchar(20);
if not exists(select * from dbo.sysobjects where id = object_id(@temptablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
exec(
'create table '+@temptablename+'(
[AllotID_NUM][INT] default 0,
[LendInto_NUM][INT] default 0,
[LendWord_NUM][INT] default 0,
[BorrowInto_num][int] default 0,
[BorrowWork_num][int] default 0
)')
end
else
begin
EXEC ('drop table ['+@temptablename+']')
exec(
'create table '+@temptablename+'(
[AllotID_NUM][INT] default 0,
[LendInto_NUM][INT] default 0,
[LendWord_NUM][INT] default 0,
[BorrowInto_num][int] default 0,
[BorrowWork_num][int] default 0
)')
set @sql='insert into '+@temptablename+' (AllotID_NUM,LendInto_NUM,LendWord_NUM,BorrowInto_num,BorrowWork_num)
SELECT COUNT(AllotID) as AllotID_NUM
,sum(Case when DataType=''借款'' then 1 else 0 end ) as LendInto_NUM
,sum(CASE WHEN DataType=''借款'' AND IsDialed=''是'' THEN 1 ELSE 0 END ) as LendWord_NUM
,sum(CASE WHEN DataType=''出借'' then 1 else 0 end ) as BorrowInto_num
,sum(CASE WHEN DataType=''出借'' AND ISDIALED=''是'' THEN 1 ELSE 0 END ) as BorrowWork_num
FROM CRM_XH_Allot where DisTime between '''+convert(varchar(50),@CREATEDATESTARTTIME,120)+''' AND '''+convert(varchar(50),@CREATEDATEENDTIME,120)+''''
print(@sql)
exec(@sql)
end
end
执行的时候 没有报错,但是 在使用存储过程的时候 报个
消息 102,级别 15,状态 1,第 1 行
“(”附近有语法错误。
大神们指出我的错误来
------解决思路----------------------
已经找出问题了
你并没有给@temptablename赋过值,后面动态执行创建表的那句就语法不对,那必须报错啊,
------解决思路----------------------
如我在2楼所说,这个变量@temptablename
你赋一下值试下,如
declare
@temptablename varchar(100),
@sql varchar(4000),@startdate varchar(20),@enddate varchar(20);
SET @temptablename='#TEMP'