【问题标题】:How to use numeric int in exec sp_executesql如何在 exec sp_executesql 中使用数字 int
【发布时间】:2014-04-14 21:35:46
【问题描述】:

有什么方法可以在 sp_executesql 中使用数字整数?

declare @total_test int
declare @test int
set @sql=N'select @test=count (*) from '+@db+'..'+@table
exec sp_executesql @sql
set @total_test +=@test

问题是他不会接受任何数字整数, 我什至不能设置@sql=N'select count (*)...'

有什么想法吗?感谢您的帮助。

【问题讨论】:

  • 您是否同时处理所有三个版本? Sql Server 2005/2008/2012 ?

标签: sql-server-2008 tsql sql-server-2005 sql-server-2012


【解决方案1】:

您需要对变量使用OUTPUT 子句。另外,在将对象名称连接到动态 sql 字符串时,您必须使用 QUOTENAME() 函数,以保护您免受可能的 sql 注入攻击。

declare @total_test int;
declare @test int;
SET @total_test = 0;

set @sql=N'select @test=count (*) from '+ QUOTENAME(@db)+'..'+ QUOTENAME(@table)

EXECUTE sp_executesql @sql
                     ,N'@test int OUTPUT'
                     ,@test OUTPUT
set @total_test +=@test

【讨论】:

  • @total_test 应该在某处初始化为NULL += @test IS NULL
  • 没问题,它有帮助:)
  • QUOTENAME() 函数的作用是在传递的参数周围加上括号 []。因此,传递给该参数的任何内容都被视为对象名称。如果您将该服务器设置为链接服务器并且语法有效。
  • 就错误消息而言,我认为您正在使用一个变量'@table_sum',在将它传递给动态 sql 之前您没有声明它。不要忘记传递给动态 sql 的任何变量,在将参数传递给系统存储过程 sp_executesql 时必须声明该变量,因为 sp_executesql 有自己的范围,并且任何已声明超出其范围的变量都可以访问 sp_executesql。
猜你喜欢
  • 2013-01-07
  • 1970-01-01
  • 2023-03-25
  • 2015-04-13
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 2023-03-30
  • 2012-03-05
相关资源
最近更新 更多