SQL存储过程和触发不能使用USE的应对方法

大家都知道在SQL的存储过程,触发中不能使用USE。

怎么办呢,当然可以直接用[databasename].[user].[tablename]这样来访问,但是某些语句必须在当前数据库下执行,比

如sp_adduser等。

之前看到一篇文章,我测试了有问题。

原文:


这里提供一个解决方案:

使用Exec(ute)语句来改变当前数据库,不过要注意的是,数据库环境的更改只在Execute语句结束前有效,所以你必须把

后面的语句和Execute放到一起。Example:

create proc test

as

exec('use pubs') exec sp_adduser 'test'

go

exec test


我自己试了一下,根据下面的语句执行没有问题:

使用Exec(ute)语句来改变当前数据库。

如下:

CREATE PROCEDURE cs

AS

BEGIN

exec('use sjdbmis; select plucode from txtplu')

END

GO



又如:

CREATE PROCEDURE cs

AS

BEGIN

exec('use sjdbmis; exec sp_adduser ''test''')

END

GO


(文/琳达  出处/赛迪网)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [SQL] 的这些文章也感兴趣:

数据库开发的持续集成 - 方法和流程
SQL开发中容易忽视的一些小地方( 三)
SQL中的时间计算语句使用实例解答
常见数据库系统之比较 - 数据库的发展和现状
SQL字符串函数
利用SQL注入缺陷进行攻击的方法及代码
数据库管理员(DBA)日常必备的sql列表
通用分页存储过程真的有注入漏洞吗?
数据库管理员制胜之宝
网络数据库设计入门(三)SQL语言的分类及语法