问个超级弱智的问题,存储过程可以使用连接好了的SQL语句作为参数吗?谢谢! 原来一个信息发布系统分页是使用的SQL语句将全部记录读出来用的。现在考虑到以后信息多了效率肯定会严重下降,想改用存储过程分类。但改动不想太大。我想直接用存储过程传参数方式传入一条SQL语句。请问:可以这么用吗?如果可以,给个例子OK?谢谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 create proc sp_test( @p varchar(1000))asexec (@p)go--调用declare @sql varchar(1000)set @sql='select top 1 * from sysobjects'exec sp_test @sqldrop proc sp_testgo--------------------------------------------------------------------------------动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: declare @fname varchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fname varchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输出参数 declare @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将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 对于Lz的问题,答案是可以的...例子1楼的朋友已经贴了..specialsoldier(雪地撒野) ( ) 信誉:100 Blog 2006-08-26 09:57:00 得分: 0 字符串前一定要加N ----------------------这个N有什么用啊? 看到好几次了 告诉我下 谢了~加N是转换成Nvarchar数据类型 传一个SQL语句,值一个代表当前页的变量,再传一个页面大小。这样可以了吗?要求返回:页面大小条数的记录集,总的条数与页数 获取html的CheckBox控件的状态 简单正则 急急急!!!! 远程连接MySql数据库的问题 服务器传递参数给客户端js函数 winxp上调试成功,但放在win2003却不能实现上传功能 关于input file文件上传的问题(在CSDN找不到相关的解决方法) APS.NET写好的项目怎么删除? 帮测试一下分页速度,50000条记录,此速度是否正常?在线等. 估计对这类问题不会有什么太好的解决办法,死马当活马医吧!麻烦各位进来帮偶看看这个关于datagrid的问题! 请问有web上用的statusbar控件吗? GridView排序时筛选没了? 像QQ一样功能的网页间发送消息
(
@p varchar(1000)
)
asexec (@p)go--调用declare @sql varchar(1000)
set @sql='select top 1 * from sysobjects'
exec sp_test @sql
drop proc sp_test
go--------------------------------------------------------------------------------动态sql语句基本语法
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名 declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将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
字符串前一定要加N
----------------------
这个N有什么用啊? 看到好几次了 告诉我下 谢了~加N是转换成Nvarchar数据类型
页面大小条数的记录集,总的条数与页数