用x作为参数声明VARCHAR(x)?

时间:2013-06-19 07:35:55

标签: sql-server tsql

我有一个关于在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不是整数吗?那么为什么编译器会抱怨?

我错过了什么吗?

1 个答案:

答案 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

为了在每种情况下执行此操作,您应该创建一个包含您必须运行的所有查询的表。

要创建所有这些查询,您必须使用游标。

您可以在此处找到游标的文档:

另外,我已经回答了另一个问题,并给出了一个光标示例: