ALTER PROCEDURE [dbo].[Pr_UpdateOnePermit]
(
@HolidayID int,
@PermitField nvarchar(50),
@IdeaField nvarchar(50),
@UserNameField nvarchar(50),
@PermitValue int,
@IdeaValue nvarchar(500),
@UserNameValue nvarchar(50),
@StartTime DateTime,
@EndTime DateTime
)
ASexec('update [holiday] set ' + @PermitField + '=''' + @PermitValue + ''','+ @IdeaField + '='''
+ @IdeaValue + ''',' + @UserNameField + '=''' + @UserNameValue + ',StartTime='''+@StartTime+',EndTime='''+@EndTime+''' where ID=' + @HolidayID)
原来这个存储过程没错,自从我加了两个字段StartTime跟EndTime之后就不行了,提示:'08' 附近有语法错误。
(
@HolidayID int,
@PermitField nvarchar(50),
@IdeaField nvarchar(50),
@UserNameField nvarchar(50),
@PermitValue int,
@IdeaValue nvarchar(500),
@UserNameValue nvarchar(50),
@StartTime DateTime,
@EndTime DateTime
)
ASexec('update [holiday] set ' + @PermitField + '=''' + @PermitValue + ''','+ @IdeaField + '='''
+ @IdeaValue + ''',' + @UserNameField + '=''' + @UserNameValue + ',StartTime='''+@StartTime+',EndTime='''+@EndTime+''' where ID=' + @HolidayID)
原来这个存储过程没错,自从我加了两个字段StartTime跟EndTime之后就不行了,提示:'08' 附近有语法错误。
+ @IdeaValue + ''',' + @UserNameField + '=''' + @UserNameValue + ',StartTime='''+@StartTime+''',EndTime='''+@EndTime+''' where ID=' + @HolidayID)
---------------------------------------------
这回的错误提示多了:'08' 附近有语法错误。
字符串 ' where ID=65' 后的引号不完整。
+@StartTime+',---->+@StartTime+''',
+ @HolidayID----->+ ltrim(@HolidayID)
+ @IdeaValue + ''',' + @UserNameField + '=''' + @UserNameValue + ',StartTime='''+@StartTime+',EndTime='''+@EndTime+''' where ID=' + cast(@HolidayID as varchar(16)))
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名 declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中? declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
--------------------------------
这个是int类型,不能用ltrim吧dobear_0922(do熊) (
--------------------------------
cast附近有错误
我这个存储过程就是StartTime跟EndTime附近有错误,别处是正确的
(
@HolidayID int,
@PermitField nvarchar(50),
@IdeaField nvarchar(50),
@UserNameField nvarchar(50),
@PermitValue int,
@IdeaValue nvarchar(500),
@UserNameValue nvarchar(50),
@StartTime DateTime,
@EndTime DateTime
)
AS--将日期转换成字符格式
declare @Start varchar(23), @End varchar(23)
set @Start = convert(varchar(23),@StartTime,121)
set @End = convert(varchar(23),@EndTime,121)exec('update [holiday] set ' + @PermitField + '=''' + @PermitValue + ''','+ @IdeaField + '='''
+ @IdeaValue + ''',' + @UserNameField + '=''' + @UserNameValue + ',StartTime='''+@Start+',EndTime='''+@End+''' where ID=' + @HolidayID)
你试一下就清楚了。嘿嘿,楼上的,可能真的要找你了
---------------------------------------'2007' 附近有语法错误。
+ @IdeaValue + ''',' + @UserNameField + '=''' + @UserNameValue + ',StartTime='''+@Start+''',EndTime='''+@End+''' where ID=' + @HolidayID)--@Start后面加多两点。
exec('update [holiday] set ' + @PermitField + '=''' + @PermitValue + ''','+ @IdeaField + '=''' + @IdeaValue + ''',' + @UserNameField + '=''' + @UserNameValue + ''',StartTime='''+@Start+''',EndTime='''+@End+''' where ID=' + @HolidayID)
+ @IdeaValue + ''',' + @UserNameField + '=''' + @UserNameValue + ',StartTime='''+@StartTime+''',EndTime='''+@EndTime+''' where ID=' + @HolidayID)