加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL SERVER存储过程动态SQL的实现

发布时间:2020-12-12 12:37:52 所属栏目:MsSql教程 来源:网络整理
导读:SQL SERVER存储过程动态SQL的实现 中文 这个问题在最近写存储过程时困扰了N久,用BAIDU查遍国内的各网站使用没有一个好的解决方案,最终通过GOOGLE搜索关键字SQL SERVER DYNAMIC SQL,再通过各国外论坛才找到一个不起眼的网站的某页面. http://www.sommarskog.s

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......而且老外更倾向技术的交流,而国内号称有许多高手,真正乐意分享的太少太少......

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读