表名作存储过程参数 使用sp_executesql动态语句
2008-08-07 10:09
666 查看
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: 胡海
-- Create date: 2008-8-6
-- Description:
-- =============================================
ALTER PROCEDURE [dbo].[获取当前图片表中最大图片ID]
(
@TableName varchar(20), --图片表名
@Pic_ColumnName varchar(20), --图片表中的图片列名
@Obj_ColumnName varchar(20) --图片表中的对象列名
)
AS
declare @VarLength int ; --对象名长度
declare @numstr varchar(10); --编码字符串
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
SET NOCOUNT ON;
declare @sql nvarchar(200);
set @sql='select '+ '@Length' +' = (select Col_Length('''+@TableName+''','''+@Obj_ColumnName+''') from '+ @TableName +')';
--注意加三个单引号的地方,这是关键。要感谢paoluo(一天到晚游泳的鱼),不然我死也找不出来错误在哪。
exec sp_executesql @sql,N'@Length int output',@VarLength output
set @VarLength=@VarLength+1;
--substring(expr,pos_start,length)是从pos_start-1处开始提取字符串的,如'1234567890',substring('1234567890',8,10),
--如果我们想要第8位后面的字符串,以上写法就不行,因为它取的是从8开始后面的字符串,所以应从8加1位开始提取
declare @param nvarchar(50)
set @param=N'@Length int,@num_string nvarchar(10) output'
set @sql='select '+ '@num_string'+'=(select substring('+@Pic_ColumnName+','+'@Length'+',20) from '+@TableName+')';
exec sp_executesql @sql,@param,@VarLength,@numstr output
select cast(@numstr as int)
END
--希望能对用表名作存储过程参数的朋友有帮助,参数关于sp_executesql 的详细用法请参见SqlServer联机文档
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: 胡海
-- Create date: 2008-8-6
-- Description:
-- =============================================
ALTER PROCEDURE [dbo].[获取当前图片表中最大图片ID]
(
@TableName varchar(20), --图片表名
@Pic_ColumnName varchar(20), --图片表中的图片列名
@Obj_ColumnName varchar(20) --图片表中的对象列名
)
AS
declare @VarLength int ; --对象名长度
declare @numstr varchar(10); --编码字符串
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
SET NOCOUNT ON;
declare @sql nvarchar(200);
set @sql='select '+ '@Length' +' = (select Col_Length('''+@TableName+''','''+@Obj_ColumnName+''') from '+ @TableName +')';
--注意加三个单引号的地方,这是关键。要感谢paoluo(一天到晚游泳的鱼),不然我死也找不出来错误在哪。
exec sp_executesql @sql,N'@Length int output',@VarLength output
set @VarLength=@VarLength+1;
--substring(expr,pos_start,length)是从pos_start-1处开始提取字符串的,如'1234567890',substring('1234567890',8,10),
--如果我们想要第8位后面的字符串,以上写法就不行,因为它取的是从8开始后面的字符串,所以应从8加1位开始提取
declare @param nvarchar(50)
set @param=N'@Length int,@num_string nvarchar(10) output'
set @sql='select '+ '@num_string'+'=(select substring('+@Pic_ColumnName+','+'@Length'+',20) from '+@TableName+')';
exec sp_executesql @sql,@param,@VarLength,@numstr output
select cast(@numstr as int)
END
--希望能对用表名作存储过程参数的朋友有帮助,参数关于sp_executesql 的详细用法请参见SqlServer联机文档
相关文章推荐
- 转贴自微软MSDN:建议执行动态SQL时,使用sp_executesql 存储过程而不要使用EXECUTE 语句
- LINQ的ORM功能中对使用sp_executesql语句的存储过程的支持
- 动态存储过程 sp_executesql介绍和使用
- LINQ的ORM功能中对使用sp_executesql语句的存储过程的支持
- 综合应用WPF/WCF/WF/LINQ之十三:LINQ的ORM功能中对使用sp_executesql语句的存储过程的支持
- mysql 存储过程 根据参数 动态执行sql语句
- MySql带参数的存储过程编写(动态执行SQL语句)
- 一个存储过程:带参数动态执行sql语句:Execute Immediate
- MySql带参数的存储过程编写(动态执行SQL语句)
- MySql带参数的存储过程编写(动态执行SQL语句)
- 带参数的存储过程sp_executesql
- Oracle 动态SQL语句(4)之存储过程的调用与浅谈字符串的使用
- MySql带参数的存储过程编写(动态执行SQL语句)
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- 动态语句的使用方法(exec/sp_executesql)
- SQL分页参数传值 在存储过程中使用 动态SQL实现
- 存储过程update吧 sql语句拼接(列是动态参数)
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- mysql存储过程中根据传入参数,动态拼sql语句并且执行