日期:2014-05-18 浏览次数:20495 次
ALTER FUNCTION [dbo].[GETBUSINESSNUMBER] (@TABLENAME VARCHAR(50),@FILEDNAME VARCHAR(50),@STR VARCHAR(10)) --第一个参数为表明,第二个参数为字段名,第三个参数为一个字符串,如GD。 RETURNS VARCHAR(100) AS BEGIN DECLARE @NUMBER VARCHAR(100);--声明一个最终返回值的变量 DECLARE @YEAS VARCHAR(10);--当前年 DECLARE @MOTH VARCHAR(10);--当前月 DECLARE @S INT;--中间变量 SET @YEAS=RIGHT(DATENAME(yy,GETDATE()),2);--得到年 SET @MOTH=DATENAME(mm,GETDATE());--得到月 SET @NUMBER=@STR+@YEAS+'('+@MOTH+')-';--得到一个字符串 如 GD12(04)- 这样的 DECLARE @SQLSTR VARCHAR(300);--声明一个变量的SQL语句, SET @SQLSTR='SELECT @S=MAX(RIGHT('+@FILEDNAME+',4)) FROM '+QUOTENAME(@TABLENAME); SET @SQLSTR=@SQLSTR+' WHERE LEFT('+@FILEDNAME+',9)='+''''+@NUMBER+''''; --这里是对SQL语句进行拼接,查询到所在表的最大编号。 EXEC @SQLSTR;--这里来执行。注意不是EXEC(@sqlstr),这样会报错,不知道为什么 --SELECT @S=MAX(RIGHT(@FILEDNAME,4)) FROM @TABLENAME WHERE @FILEDNAME=@NUMBER; --为什么我不用上面屏蔽掉的这一句,直接简单,我发觉会报一个让声明表变量的错误。因为@TABLENAME是传入的一个字符串,结果就好比 --SELECT * FROM 'CUSTOMER'一样,会报错,没找到解决方法 SET @NUMBER=@NUMBER+dbo.PadLeft(STR(@S+1),'0',4);--这里是另外一个补白的函数 ,如返回88 转换橙0088. RETURN @NUMBER; END GO
DECLARE @IntVariable int; DECLARE @SQLString nvarchar(500); DECLARE @ParmDefinition nvarchar(500); DECLARE @max_title varchar(30); SET @IntVariable = 197; SET @SQLString = N'SELECT @max_titleOUT = max(JobTitle) FROM AdventureWorks2012.HumanResources.Employee WHERE BusinessEntityID = @level'; SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT'; EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT; SELECT @max_title;