我有一个关于在TSQL中声明一些变量的基本问题。
当我像这样在TSQL中声明一个数字变量时,外行是可以的:
DECLARE @Value AS NUMERIC(18,2) = 1.23
但是如果我想用参数设置小数呢?
DECLARE @NrOfDecimals AS INTEGER = 2
DECLARE @Value AS NUMERIC(18,@NrOfDecimals) = 1.23
--This second line throws a compile error "Expecting INTEGER"
因此第二行抛出编译错误“Expecting INTEGER”。
但是@NrOfDecimals不是整数吗?那么为什么编译器会抱怨?
我错过了什么吗?
答案 0 :(得分:2)
您可以动态创建查询并执行它们。
这适用于你问题中的情况:
DECLARE @NrOfDecimals AS INTEGER = 2
DECLARE @myCommand as NVARCHAR(1000)
SET @myCommand = 'DECLARE @value as numeric(18,' + CAST(@NrOfDecimals as VARCHAR) + ') = 1.23'
execute sp_executesql @myCommand
为了在每种情况下执行此操作,您应该创建一个包含您必须运行的所有查询的表。
要创建所有这些查询,您必须使用游标。
您可以在此处找到游标的文档:
另外,我已经回答了另一个问题,并给出了一个光标示例: