一个查询存储过程的问题(字段不定,条件运算不定)

老僧的小九九 2007-02-06 01:03:41
ALTER PROCEDURE [dbo].[brandIDQurey]
(
@columnName nvarchar(50),
@oper nvarchar(8),
@param nvarchar(255)
)
AS
SET NOCOUNT ON;
DECLARE @sqlString nvarchar(255)
SET @sqlString = N'SELECT 存货表.* FROM 存货表 WHERE (' + @columnName + @oper + @param + N' )'
exec sp_executesql @sqlString, N'@columnName nvarchar(50),@oper nvarchar(8),@param nvarchar(255)',@columnName,@oper,@param
参数@param输入纯数字可完成查询,输入字母跟汉字则提示列名'xxx'无效,到底是怎么回事,请高手指教
...全文
227 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gc_ding 2007-02-06
  • 打赏
  • 举报
回复
CREATE TABLE 存货表
(
C1 VARCHAR(100),
C2 VARCHAR(100),
C3 VARCHAR(100)
)
INSERT 存货表
SELECT 'A', 'B', 'C'
GO

CREATE PROCEDURE [dbo].[brandIDQurey]
(
@columnName nvarchar(50),
@oper nvarchar(8),
@param nvarchar(255)
)
AS
SET NOCOUNT ON;
DECLARE @sqlString nvarchar(255)
SET @sqlString = N'SELECT * FROM 存货表 WHERE (' + @columnName + @oper +N''''+ @param + N''' )'
exec sp_executesql @sqlString, N'@columnName nvarchar(50),@oper nvarchar(8),@param nvarchar(255)',@columnName,@oper,@param
GO

EXEC brandIDQurey 'C3','=','C'

DROP PROC brandIDQurey
DROP TABLE 存货表

--结果
/*
C1 C2 C3
-------------------------
A B C
*/
gc_ding 2007-02-06
  • 打赏
  • 举报
回复
因为参数@param是字符型,所以要在两边加单引号,比如:
--你的结果:...where column=abc
--正确的结果:...where column='abc'
gc_ding 2007-02-06
  • 打赏
  • 举报
回复
--找到了,楼主少了引号
ALTER PROCEDURE [dbo].[brandIDQurey]
(
@columnName nvarchar(50),
@oper nvarchar(8),
@param nvarchar(255)
)
AS
SET NOCOUNT ON;
DECLARE @sqlString nvarchar(255)
SET @sqlString = N'SELECT * FROM 存货表 WHERE (' + @columnName + @oper +N''''+ @param + N''' )'
exec sp_executesql @sqlString, N'@columnName nvarchar(50),@oper nvarchar(8),@param nvarchar(255)',@columnName,@oper,@param
OracleRoob 2007-02-06
  • 打赏
  • 举报
回复
--try



ALTER PROCEDURE [dbo].[brandIDQurey]
(
@columnName nvarchar(50),
@oper nvarchar(8),
@param nvarchar(255)
)
AS
SET NOCOUNT ON;
DECLARE @sqlString nvarchar(255)
SET @sqlString = N'SELECT 存货表.* FROM 存货表 WHERE ([' + @columnName + ']' + @oper + '[' + @param + ']' + N' )'
exec sp_executesql @sqlString, N'@columnName nvarchar(50),@oper nvarchar(8),@param nvarchar(255)',@columnName,@oper,@param
OracleRoob 2007-02-06
  • 打赏
  • 举报
回复
--如何将exec执行结果放入变量中?

declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num

marco08 2007-02-06
  • 打赏
  • 举报
回复
列名加[]试试
baggio785 2007-02-06
  • 打赏
  • 举报
回复
参数是什么呢?

把sql语句print出来看看
老僧的小九九 2007-02-06
  • 打赏
  • 举报
回复
昨晚已经解决了,不过还是要谢谢gc_ding(施主,给个妞泡好么)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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