语句错误。帮忙看看

cngothic 2013-12-10 03:05:37
程序执行提示@table未声明标量变量。监控SQL得到下面语句。麻烦朋友帮我纠正语法错误
谢谢

exec sp_executesql N'select top 50 U.U from @table S join user_temp U on S.sign = U.sign and S.P=(select top 1 P from @table where sign = U.sign and P like (''+ @P +%'') order by Sign desc, P asc) where s.P like (''+ @P +%'') order by orderby DESC',N'@table varchar(20),@P varchar(30)',@table='st',@P='cngothic'
...全文
91 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-12-10
  • 打赏
  • 举报
回复
引用 3 楼 cngothic 的回复:
我是通过NET程序传过来的。之后监控到代码如上。表名不能传参的话。我只好拼接SQL语句了。 刚才也测试了NET程序把表名参数去除正常运行了。 [quote=引用 2 楼 yupeigu 的回复:] 在 sp_executesql 这个中,不能把表名、列名,做成变量的,会报错。 建议你直接用exec来做吧
我的代码如下,我无法设置exec,或我改用存储过程:

            SqlParameter[] parm = new SqlParameter[2]{  
                    new SqlParameter("@table", SqlDbType.VarChar, 20),  
                    new SqlParameter("@partno", SqlDbType.VarChar, 30),  
            };
            parm[0].Value = "st" ;
            parm[0].Value = partno.Trim();
            Console.WriteLine(partno.Trim());
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, sql, parm);
            DataTable dt = ds.Tables[0];
            return dt;
[/quote] 对看样子,就只能改成存储过程了,其实参数什么的都一样,只不过是不再调用sp_executesql了,而是你自己的写的存储过程,然后里面拼接语句,然后用exec 来执行
cngothic 2013-12-10
  • 打赏
  • 举报
回复
我是通过NET程序传过来的。之后监控到代码如上。表名不能传参的话。我只好拼接SQL语句了。 刚才也测试了NET程序把表名参数去除正常运行了。
引用 2 楼 yupeigu 的回复:
在 sp_executesql 这个中,不能把表名、列名,做成变量的,会报错。 建议你直接用exec来做吧
我的代码如下,我无法设置exec,或我改用存储过程:

            SqlParameter[] parm = new SqlParameter[2]{  
                    new SqlParameter("@table", SqlDbType.VarChar, 20),  
                    new SqlParameter("@partno", SqlDbType.VarChar, 30),  
            };
            parm[0].Value = "st" ;
            parm[0].Value = partno.Trim();
            Console.WriteLine(partno.Trim());
            DataSet ds = SqlHelper.ExecuteDataSet(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, sql, parm);
            DataTable dt = ds.Tables[0];
            return dt;
LongRui888 2013-12-10
  • 打赏
  • 举报
回复
在 sp_executesql 这个中,不能把表名、列名,做成变量的,会报错。 建议你直接用exec来做吧
發糞塗牆 2013-12-10
  • 打赏
  • 举报
回复
from 里面不能这样用

34,838

社区成员

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

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