微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

表名作存储过程参数 使用sp_executesql动态语句

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+',20) from '+@TableName+')';   
 exec sp_executesql @sql,@param,@VarLength,@numstr output
 
 select cast(@numstr as int)
 
 
END

--希望能对用表名作存储过程参数的朋友有帮助,参数关于sp_executesql 的详细用法请参见sqlServer联机文档

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐