sql 存储过程拼接动态SQL的问题
小弟有如下一个存储过程
CREATE PROC [dbo].[getField]
(
@TableName VARCHAR(100),
@ReturnField VARCHAR(100),
@ParamField VARCHAR(100),
@ParamValue VARCHAR(100)
)
AS
DECLARE @sql VARCHAR(1000)
DECLARE @Params VARCHAR(1000)
BEGIN
IF (@ParamValue IS NOT NULL)
BEGIN
SET @sql = 'select ' + @ReturnField + ' from ' + @TableName + ' where ' +
@ParamField+ '=' +'''' +@ParamValue+''''
END
ELSE
BEGIN
SET @sql = 'select ' + @ReturnField + ' from ' + @TableName
END
PRINT @sql
EXEC (@sql)
END
现在有个问题是在ssms中调试这个存储过程时,可以正常读到数据,但是在c#中传入相同的值时,却报错“=附近有语法错误”,我在SSMS把SQLprint出来是正常的,
select 部门 from 员工信息 where 工号='201403002'
什么原因,求指导啊啊啊啊
------解决方案--------------------存储过程没问题 估计还是调用出问题了 检查一下你的程序。
------解决方案--------------------你这么写很累的
IF (@ParamValue IS NOT NULL)
BEGIN
SET @sql = 'select ' + @ReturnField + ' from ' + @TableName + ' where ' +
@ParamField+ '=' +'''' +@ParamValue+''''
END
改成这样把,如果@ParamValue是null,那么 这一堆@ParamField+ '=' +'''' +@ParamValue+'''' 就是null,那么就是'' 也就是空串
SET @sql = 'select ' + @ReturnField + ' from ' + @TableName + ' where 1=1' +
ISNULL(@ParamField+ '=' +'''' +@ParamValue+'''', '')