SQL SERVER存储过程动态SQL的实现
SQL SERVER存储过程动态SQL的实现
这个问题在最近写存储过程时困扰了N久,用BAIDU查遍国内的各网站使用没有一个好的解决方案,最终通过GOOGLE搜索关键字"SQL SERVER DYNAMIC SQ"L,再通过各国外论坛才找到一个不起眼的网站的某页面. http://www.sommarskog.se/dynamic_sql.html 文章的标题是<The Curse and Blessings of Dynamic SQL>,由此可见此问题让人恨,而一旦解决就能让人爱哩...... 正如文章中所称,该文是为了解决诸如此类的问题: SELECT * FROM @tablename SELECT @colname FROM tbl SELECT * FROM tbl WHERE x IN (@list) 而我最头疼的就是第一条,试图通过 select @name=name from @tablename来获取某动态表的变量.但文章中明确指出,同时也是我试了N次得到的结论 动态SQL只能通过如 @SQL='select @name=name from '+@tablename 要运行这条,大多数人都是通过EXEC(@SQL),但是,@name类似程序中局部变量,生存期只有在EXEC中.无法在SQL存储过程中使用. 在文章中终于找到解决办法...... 范例程序 DECLARE @sql nvarchar(4000),-- nvarchar(MAX) on SQL 2005. @col sysname, @min varchar(20) SELECT @col = N'au_fname' SELECT @sql = N'SELECT @min = convert(varchar(20),MIN(' + @col + N')) FROM authors' EXEC sp_executesql @sql,N'@min varchar(20) OUTPUT',@min OUTPUT SELECT @min 终于可以解决哩.......但要注意的是,sp_executesql后的参数只能是NVARCHAR,VARCHAR之类的字符型. 终于解决了....... 该文中还有一些防止SQL注入之类的讨论,以及对新手讲解SQL存储过程的意义何在. 做SQL数据库,并转向存储开发过程的人必看..... 技术,还是老外牛X......而且老外更倾向技术的交流,而国内号称有许多高手,真正乐意分享的太少太少...... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Sqlserver合并复制的web同步详解(转微软三篇)2
- 如何让emacs sql-mode使用mysql配置文件(.my.cnf
- sql – 在DB2中拆分VARCHAR以检索其中的值
- .net – 如何在LINQ to Entities中进行LEFT JOIN
- SqlServer_SqlServer恢复数据:如何通过mdf文件和
- sql-server – 加速没有子句的巨大DELETE FROM的
- sql-server – 使用SQL Server(2008),您可以在模
- 利用Navicate把SQLServer转MYSQL的方法(连数据)
- SQL Server SQL 研究 相似的数据类型
- SQL Server SQL 无法装载DLL Microsoft原因(无法