当前位置: 代码迷 >> Sql Server >> 关于sp_executesql有关问题
  详细解决方案

关于sp_executesql有关问题

热度:64   发布时间:2016-04-27 12:00:16.0
关于sp_executesql问题
select * from view_IMAR_P_ORDER_NUMBER_GCkz where sid=1583
能查出一条记录

exec sp_executesql N'select * from view_IMAR_P_ORDER_NUMBER_GCkz where @[email protected]',
[email protected] nvarchar(200),@value nvarchar(200)',@field=N'sid',@value=N'1583'
查不出记录

请解

------解决方案--------------------
SQL code
declare @sql nvarchar(1000),@field nvarchar(200),@value nvarchar(200)select @field=N'id',@value=N'1'set @sql= N'select * from tb where [email protected][email protected]+''''exec sp_executesql @sql
------解决方案--------------------
字段名,表名,数据库名之类作为变量时,需用(execute),参数变量值作为变量时才可用sp_executesql
SQL code
--这个应是有结果的exec sp_executesql N'select * from view_IMAR_P_ORDER_NUMBER_GCkz where [email protected]',[email protected] nvarchar(200)',@value=N'1583'--或者declare @sid varchar(20),@value varchar(20),@sql nvarchar(max);select @sid='sid',@value='1583'select @sql='select * from view_IMAR_P_ORDER_NUMBER_GCkz where [email protected][email protected]+''''exec(@sql);
------解决方案--------------------
SQL code
declare @str nvarchar(1000),        @field nvarchar(200),        @value nvarchar(200)set @field=N'sid'set @value=N'1583'set @str=N'select * from view_IMAR_P_ORDER_NUMBER_GCkz where [email protected][email protected]exec sp_executesql @str--这种拼接问题楼主在执行之前把拼接的语句打印出来看看正确与否
------解决方案--------------------
SQL code
declare @sql nvarchar(1000)        , @paramter  nvarchar(1000)        , @field nvarchar(10) = 'sid'        , @filedvalue nvarchar(10)set @sql = 'select * from view_IMAR_P_ORDER_NUMBER_GCkz where ' + @field + [email protected]'set @paramter = [email protected] nvarchar(200)'set @filedvalue = '1583'exec sp_executesql @sql, @paramter ,@[email protected];