这个问题在最近写存储过程时困扰了N久,用BAIDU查遍国内的各网站使用没有一个好的解决方案,最终通过GOOGLE搜索关键字sql SERVER DYNAMIC sql,再通过各国外论坛才找到一个不起眼的网站的某页面.
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存储过程的意义何在.
技术,还是老外牛X......而且老外更倾向技术的交流,而国内号称有许多高手,真正乐意分享的太少太少......
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。