【发布时间】:2016-05-03 22:05:38
【问题描述】:
我正在创建一个带有游标的存储过程,我需要将列的数量存储到一个变量中。 SQL 说它不能将 nvarchar 转换为 int 我曾尝试使用 CONVERT、CAST 和 EXEC,但无法使其工作。 我该如何解决这个问题?
DECLARE @FieldName nvarchar(255);
DECLARE @RequestCode Nvarchar(50);
DECLARE @ReqSQLQuantity nvarchar(max);
DECLARE @Quantity int;
Select @ReqSQLQuantity = concat('select count(*) From (select distinct [', @FieldName , '] from [report_' , @RequestCode , ']) as number')
Set @Quantity = (@ReqSQLQuantity)
Select @Quantity
【问题讨论】:
-
不能这样运行动态SQL,需要使用sp_executesql
-
还简化了 SQL Select Count(distinct MyFirstSQLFieldName) 将完成这项工作。
-
@JamesZ 我从另一个同事那里找到了一些存储过程,他使用 Exec(@requestSQL) 并且工作正常。
-
是的,你也可以使用 exec,但是 sp_executesql 通常是一个更好的选择,因为你可以使用变量而不需要进行字符串连接(但不是例如表名)
标签: sql-server tsql variables stored-procedures