日期:2014-05-18  浏览次数:20718 次

数据库存储过程问题
C# code

ALTER PROCEDURE dbo.GetAllCounts
@DateDeal varchar(50),
@Flight varchar(10),
@WorkeTime datetime,
@ReadValues int output
AS
select  @ReadValues=Count(*) from [@DateDeal] where 班次=[@Flight] and 工作时间=[@WorkeTime]


对象名 '@DateDeal' 无效。
没有行受影响。
(返回 0 行)
@ReadValues = 0
@RETURN_VALUE = 
完成 [dbo].[GetAllCounts] 运行。





------解决方案--------------------
declare @sqls nvarchar(4000) 
set @sqls='select @a=count(*) from [' + @DateDeal + '] WHERE 班次='+@Flight +'and 工作时间='''+@WorkeTime+''''

exec sp_executesql @sqls,N'@a int output',@ReadValues
------解决方案--------------------
你这里要用动态SQL语句,
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL 

eg:
declare @fname varchar(20) 
set @fname = 'FiledName' 
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 


请参照:
http://www.leftworld.net/wenzhang/show/2151.html