动态SQL:使用在字符串之外声明的变量

CM2K

我有一个存储过程,该过程应该计算一个人的年龄。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

alter PROCEDURE [dbo].[ageTest] 
(
 @curDate date 
 )
AS
BEGIN
    SET NOCOUNT ON;
declare @sql nvarchar(max)
declare @params nvarchar (1000) 

declare @age date

set @params = N' @curDate date , @age date output'
set @sql = '
declare @dif float 
declare @ageRound int
declare @theAge varchar (100)
set @age = ''19890406''
set @theAge =(select (datediff (mm, @age , getdate()))) 
set @dif = @theAge % 12
set @ageRound = cast (@theAge as float)/12 
select @ageRound as Years, @dif as months  
'

set @sql = replace (@sql, '19890406', @curDate)
execute sp_executesql @sql, @params, @curDate, @age output

end

execute [dbo].[ageTest] '19511214'

我想要获得的是两列:

Years     Months
63         10

现在看起来像这样: 在此处输入图片说明

问题是循环。我可能应该从中删除选择@sql并将其放在外面,然后出现声明问题。有什么想法吗?

编辑:不重复

伊瓦达斯·布伊纳斯卡斯(Evaldas Buinauskas)

如果您真的只是一个初学者。

首先,您应该始终在过程中使用TRY ... CATCH块。

这是您在代码中所做的快速重写:

-- =============================================
-- Procedure Name   : dbo.ageTest
-- Usage Example    : EXECUTE [dbo].[ageTest] '19511214';
-- =============================================
ALTER PROCEDURE [dbo].[ageTest]
(
    @curDate DATE
)
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
        SELECT DATEDIFF(MM, @curDate, CURRENT_TIMESTAMP) / 12 AS Years
            , DATEDIFF(MM, @curDate, CURRENT_TIMESTAMP) % 12 AS Months;
    END TRY
    BEGIN CATCH
        SELECT ERROR_NUMBER(), ERROR_MESSAGE();
    END CATCH
END

它显示了您应该如何在SP中使用参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态声明字符串变量

来自分类Dev

Vim使用在字符串内插的变量?

来自分类Dev

使用在该函数之外的函数中声明的变量

来自分类Dev

SQL在等号的左侧合并声明的字符串变量

来自分类Dev

如何使用在 sys.argv 中的项目文件中声明的字符串?

来自分类Dev

如何在postgres动态SQL中使用带引号的字符串内的变量

来自分类Dev

Ruby:使用变量的动态绑定评估字符串

来自分类Dev

使用动态字符串变量调用Python函数

来自分类Dev

jQuery / JavaScript从字符串声明变量

来自分类Dev

Java全局字符串变量的声明

来自分类Dev

在字符串中声明变量

来自分类Dev

在字符串中声明变量

来自分类Dev

声明为字符串的变量数组

来自分类Dev

对象可以使用在其类之外声明的全局变量吗?

来自分类Dev

ssis动态连接字符串变量

来自分类Dev

ssis动态连接字符串变量

来自分类Dev

在动态查询字符串sql中使用东东

来自分类Dev

使用字符串变量进行SQL搜索

来自分类Dev

使用字符串的 JavaScript 声明

来自分类Dev

字符串声明

来自分类Dev

如何在jQuery中使用数学运算将字符串声明为变量

来自分类Dev

使用在C中执行子字符串的函数时,字符串解析失败

来自分类Dev

我可以使用在数组范围之外声明为局部变量的数组的值吗?

来自分类Dev

如何在字符串中插入动态SQL oracle变量?

来自分类Dev

如何将字符串变量传递给动态sql中的where子句

来自分类Dev

如何在汇编中声明字符串变量?

来自分类Dev

从加密文件读取到声明的字符串变量

来自分类Dev

声明字符串变量时对象必填错误

来自分类Dev

字符串变量'未声明'标头C ++

Related 相关文章

热门标签

归档