日期:2014-05-16  浏览次数:20963 次

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+'''', '')