0

我希望SQL CONVERT在引用变量来设置data_type.

例如:

CONVERT(nvarchar(10), column1, 120)

但不是指定nvarchar(10)我想引用一个变量:

CONVERT(@myDataType, column1, 120)

现在@myDataType可能是nvarchar(10),nvarchar(7)Int,但我无法弄清楚实现该功能的语法。

或者,我想将大小设置为参数:

CONVERT(nvarchar(@mySize), column1, 120)

大小可以是Int. 这似乎也不起作用。

这些都可能吗?

4

2 回答 2

0

不,你不能这样做。参数仅代表文字(即“常量”)值。它们不代表标识符、关键字、运算符和语言的其他组件。

在存储过程中,您可以使用动态 SQL 解决此问题。

但是,SQL Server 不支持(以任何简单合理的方式)函数调用中的动态 SQL。

我建议您只需转换为nvarchar(max)然后使用left()

LEFT(CONVERT(nvarchar(max), column1, 120), @mysize)

实际上,nvarchar(max)约会有点矫枉过正。一个值如32or255应该是足够的。

于 2020-03-11T14:19:50.973 回答
0

假设您的查询基本上是静态的(如 - 您不会对其进行太多更改),您可以编写一个动态 sql 语句来创建该语句。

SET QUOTED_IDENTIFIER OFF 

DECLARE @mySize INT = 10
DECLARE @q NVARCHAR(MAX)

SET @q="
    SELECT CONVERT(nvarchar("+CONVERT(NVARCHAR(MAX),@mySize)+"), column1, 120)"

PRINT @q
EXEC sp_executesql @q 
于 2020-03-11T14:47:22.453 回答