存储过程中动态传SQL语句出错

sione88 2009-06-10 11:49:11


存储过程:

ALTER PROCEDURE  [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

select distinct * from tblProvince where 1=1 + @provincesql

END


exec s_sp_Getprovince 'and zid=bj'




我在上面的存储过程中动态的传入一条SQL语句时出错:

在将 nvarchar 值 'and zid=bj' 转换成数据类型 int 时失败。

...全文
22 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
华芸智森 2009-06-10
  • 打赏
  • 举报
回复
不细看题,想当然了,不好意思。

ALTER PROCEDURE [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

declare @var_cmd varchar(800);
set @var_cmd='select distinct * from tblProvince where 1=1 ‘ + @provincesql);
execute(@var_cmd);
END

--参数也改一下
exec s_sp_Getprovince 'and zid=''bj'''
JonasFeng 2009-06-10
  • 打赏
  • 举报
回复
传入的SQL 是nvarchar,无法直接执行
必须用EXEC

ALTER PROCEDURE  [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

exec('select distinct * from tblProvince where 1=1 '+ @provincesql)

END
华芸智森 2009-06-10
  • 打赏
  • 举报
回复
ALTER PROCEDURE [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

declare @var_cmd varchar(800);
set @var_cmd='select distinct * from tblProvince where 1=' + cast( 1 + @provincesql as varchar);
execute(@var_cmd);
END


exec s_sp_Getprovince 'and zid=bj'
水族杰纶 2009-06-10
  • 打赏
  • 举报
回复
--TRY
ALTER PROCEDURE [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

EXEC('select distinct * from tblProvince where 1=1' + @provincesql)

END
ks_reny 2009-06-10
  • 打赏
  • 举报
回复

ALTER PROCEDURE [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

exec('select distinct * from tblProvince where 1=1 '+ @provincesql)

END

csdyyr 2009-06-10
  • 打赏
  • 举报
回复
ALTER PROCEDURE  [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

exec('select distinct * from tblProvince where 1=1 '+ @provincesql)

END
sione88 2009-06-10
  • 打赏
  • 举报
回复
请高手指点一下,谢谢!
htl258_Tony 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 csdyyr 的回复:]
SQL codeALTER PROCEDURE [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

exec('select distinct * from tblProvince where 1=1 '+ @provincesql)

END
[/Quote]正解.
shadow_sdn 2009-06-10
  • 打赏
  • 举报
回复

ALTER PROCEDURE [dbo].[s_sp_Getprovince]

@provincesql nvarchar(50)
AS
BEGIN

exec('select distinct * from tblProvince where 1=1 '+ @provincesql)

END

22,206

社区成员

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

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