2015-09-04 61 views
0

我有这个疑问错误:字符串“声明@ RepInt =”翻一番转换无效

Dim count as integer = 4 

Dim sql As String = " DECLARE @rep INT = " + count + "; " + _ 
          " WITH cte AS " + _ 
         " (" + _ 
          " SELECT TOP (@rep) " + _ 
           " ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS N " + _ 
          " FROM sys.All_Columns ac1 " + _ 
          " CROSS JOIN sys.ALL_Columns ac2 " + _ 
         ") " + _ 
         " SELECT t.Barcode" + _ 
         " FROM A_Documents t " + _ 
         " CROSS JOIN cte " + _ 
         " where idDocument = 'doc-123456' " + _ 
         " ORDER BY t.Barcode desc; " 

如果我把一个数字,没有一个变种,IST的工作原理:

Dim sql As String = " DECLARE @rep INT = 4; " + _ 

但是,当我把我的COUNT变种,是不行的:

Dim sql As String = " DECLARE @rep INT = " + count + "; " + _ 

并出现此错误消息:

The conversion of string " Declare @RepInt=" to double is not valid

+1

其实你并不需要声明变量。你可以在TOP(+ count +)内立即传递它。其次考虑使用参数绑定而不是字符串连接。另外如果你需要将'count'转换为字符串。 – lad2025

+0

再次感谢您的帮助,我不能回答您的评论,因为不是答案 –

+1

不要紧,请在下面提出答案;) – lad2025

回答

2

这就是+运营商的预期行为。

当您向其中提供一个数字变量时,系统会尝试将所有其他对象转换为该数字类型以完成添加,因此是例外。

恕我直言,这是一个功能,因为它可以让你完全知道你在串接什么。

解决方案:

Dim sql As String = " DECLARE @rep INT = " + count.ToString + "; " + _ 
2

当您尝试添加一个字符串和一个数字,它会尝试将字符串转换为数字。您可以使用&操盘手,这将东西转换不是一个字符串转换为字符串:

Dim sql As String = " DECLARE @rep INT = " & count & "; " + _ 
相关问题