@s这样写没问题:
select @s=count(学号) from manage_student_info where 姓名=@content@s这样写就有问题,请修改一下以下语句:
exec('declare @s Int;select @s=count(学号) from manage_student_info where '+@tag+'='''+@content+'''')
select @s=count(学号) from manage_student_info where 姓名=@content@s这样写就有问题,请修改一下以下语句:
exec('declare @s Int;select @s=count(学号) from manage_student_info where '+@tag+'='''+@content+'''')
declare @tag varchar(16),@content varchar(8)
select @tag='Area_id';
select @content='11000000';
exec('declare @s Int;select @s=count(*) from Areas where '+@tag+'='''+@content+''';print cast(@s as varchar(16))')
我做的测试
DECLARE @NAME VARCHAR(10);
SET @NAME='NUM';
SET @NUM=2;
EXEC('
DECLARE @S INT;SELECT @S=COUNT(*) FROM NUM WHERE '+@NAME+'='+@NUM+';
SELECT @S')
DECLARE @NUM INT ;
DECLARE @NAME VARCHAR(10);
SET @NAME=''NUM'';
SET @NUM=2;
DECLARE @SQL VARCHAR(1000);
SET @SQL=''DECLARE @S INT;SELECT @S=COUNT(*) FROM NUM WHERE ''+@NAME+''=''+LTRIM(@NUM)+'';SELECT @S;'';EXEC(@SQL)')
全动态SQL语句,加变量声明
变量名 '@s' 已声明。变量名在批查询或存储过程内部必须唯一。
必须声明变量 '@sql'。
必须声明变量 '@sql'。
语句如下:
SqlCommand comm0 = new SqlCommand("declare @s int;@sql nvarchar(4000);set @sql=N'select @s=count(学号) from manage_student_info where '+@tag+'='''+@content+'''';exec sp_executesql @sql,N'@s int output',@s output;select @s", conn);
必须声明变量 '@sql'。
必须声明变量 '@sql'。
是因为;@sql nvarchar(4000);没有声明造成的?
修改后的还是有问题:
SqlCommand comm0 = new SqlCommand("declare @s int;declare @sql nvarchar(4000);set @sql=N'select @s=count(学号) from manage_student_info where '+@tag+'='''+@content+'''';exec sp_executesql @sql,N'@s int output',@s output;select @s", conn); 错误信息:变量名 '@s' 已声明。变量名在批查询或存储过程内部必须唯一。
改为exec sp_executesql N'select @s=count(学号) from manage_student_info where '+@tag+'='''+@content+'''',N'@s int output',@s output
@content也可不直接转换,而改用参数,但@tag一定要直接转换