简单的动态TSQL查询语法
发布时间:2020-05-24 10:31:50 所属栏目:MsSql 来源:互联网
导读:这可能是一个简单的答案,但我已经盯着它看了太久…… 我有以下查询,它将存储过程输入参数作为变量名称并计算该表中的记录.我想将动态语句(@toStartStr)的结果检索到变量(@toStart)中. -- @tempTableName = SProc input parameterDECLARE @toStartStr nvarchar
|
这可能是一个简单的答案,但我已经盯着它看了太久…… 我有以下查询,它将存储过程输入参数作为变量名称并计算该表中的记录.我想将动态语句(@toStartStr)的结果检索到变量(@toStart)中. -- @tempTableName = SProc input parameter DECLARE @toStartStr nvarchar(150); DECLARE @toStart int; SET @toStartStr = 'SELECT @toStart = COUNT(ID) FROM ' + @tempTableName; EXEC(@toStartStr); 现在,一个错误表明@toStart不能与字符串SELECT连接,但这是我想要的要点.谁能看到我做错了什么?或建议替代方案?仅供参考我的SQL 2008 R2.谢谢. 解决方法DECLARE @sql NVARCHAR(255); DECLARE @toStart INT; SET @sql = N'SELECT @toStart = COUNT(ID) FROM ' + QUOTENAME(@tempTableName); EXEC sp_executesql @sql,N'@toStart INT OUTPUT',@toStart OUTPUT; PRINT @toStart; 但是,有一种更简单,更有效的方法,如果您可以忽略当前的飞行中交易(并且您正在使用SQL Server 2005或更好 – 请在提问时指定版本!). DECLARE @toStart INT; SELECT @toStart = SUM(rows) FROM sys.partitions WHERE [object_id] = OBJECT_ID(@tempTableName) AND index_id IN (0,1); PRINT @toStart; 为了完整起见,这里是SQL Server 2000的解决方案,它也不需要任何特殊权限(只需连接和公共成员): DECLARE @toStart INT; SELECT @toStart = [rows] FROM sysindexes WHERE id = OBJECT_ID(@tempTableName) AND indid IN (0,1); PRINT @toStart; 也就是说,如果你使用计数来确定下一个ID可能是什么,或者类似的东西,我认为你正在以错误的方式接近它,因为可以删除行,如果它是一个标识列值可以跳过由于回滚. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 数据库 – 在MongoDB中首选使用标准索引而不是背景索引?
- 关于sqlserver 2005 使用临时表的问题( Invalid object nam
- SQL脚本使Microsoft Sql数据库联机或脱机?
- sql-server-2005 – 用于存储手机号码的数据类型
- sql-server – 检查日期范围是否有周末
- 正在使用的SQL Server版本不支持数据类型datetime2?
- SQL错误:滥用聚合
- 安装程序 – WIX,Dot Net管理的自定义Action,动态填充组合框
- 数据库 – 有没有办法在PL / SQL中为dev应用TDD技术
- sql – Oracle中“||”运算符和concat函数之间有什么区别?
