sql 存储过程拼接动态SQL的问题

chenh_w 2014-03-20 10:38:12
小弟有如下一个存储过程
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'
什么原因,求指导啊啊啊啊
...全文
134 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lg314 2014-03-21
  • 打赏
  • 举报
回复
IF (@ParamValue IS NOT NULL) 应该是 IF (LEN(ISNULL(@ParamValue,''))>0 AND LEN(ISNULL(@ParamField,''))>0 ) 还有里面还带中文的话,字段类型应该都改成nvarchar 为什么写这样的语句?这样的方式维护起来简直是噩梦。
--小F-- 2014-03-21
  • 打赏
  • 举报
回复
存储过程没问题 估计还是调用出问题了 检查一下你的程序。
LongRui888 2014-03-21
  • 打赏
  • 举报
回复
你这么写很累的 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+'''', '')
chenh_w 2014-03-21
  • 打赏
  • 举报
回复
引用 3 楼 lg314 的回复:
IF (@ParamValue IS NOT NULL) 应该是 IF (LEN(ISNULL(@ParamValue,''))>0 AND LEN(ISNULL(@ParamField,''))>0 ) 还有里面还带中文的话,字段类型应该都改成nvarchar 为什么写这样的语句?这样的方式维护起来简直是噩梦。
没有,小菜帮同学做个毕业设计,我图了省事儿,
chenh_w 2014-03-21
  • 打赏
  • 举报
回复
引用 2 楼 fredrickhu 的回复:
存储过程没问题 估计还是调用出问题了 检查一下你的程序。
多谢指点,我又回头看了下代码,确实是调用的问题,我直接传了个空字符串进去,搞成DBNUll,就可以了
BzTech_123 2014-03-21
  • 打赏
  • 举报
回复
建议加个 OUTPUT parameter 来返回生成的 SQL 来检验。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧