自动在多个DB上执行同一条sql语句 ( 存储过程版 )
来源:互联网 发布:网络负面影响 编辑:程序博客网 时间:2024/06/13 21:56
ALTER PROC QueryMultiDB @dbs VARCHAR(2000),@sql VARCHAR(5000)ASDECLARE @dbName VARCHAR(15) DECLARE @idx INT DECLARE @tempSql VARCHAR(5000) SET @tempSql=@sql--判断sql语句是否有dbo, 如果没有则提示并返回. 这个判断也不够精确,靠自己输入把握了. IF(CHARINDEX(' dbo.',@sql)<=0)BEGIN RAISERROR( 'sql语句中的所有表名前必须加上dbo., 例如: select * from dbo.tableName',16,1) RETURNENDWHILE (LEN(@dbs) > 0) BEGIN SET @idx = CHARINDEX(',', @dbs) IF (@idx > 0) BEGIN SET @dbName = SUBSTRING(@dbs, 0, @idx) SET @dbs = SUBSTRING(@dbs, @idx + 1, LEN(@dbs) -@idx) END ELSE SET @dbName = @dbs SET @dbName=LTRIM(RTRIM(@dbName)) PRINT '----' + @dbName + '----' SET @sql=REPLACE(@tempSql,' dbo.',' '+@dbName+'.dbo.') --注: 某些地方需要显示dbName, 传入的sql语句应类似: 'SELECT ''@dbName'' as webid,* FROM dbo.table' SET @sql=REPLACE(@sql,'@dbName',@dbName) --print (@sql) --用于调试, 判断动态生成的sql语句是否正确 EXEC(@sql) --执行动态sql IF (@idx <= 0) BREAK END --执行 EXEC QueryMultiDB 'db01,db02' ,'SELECT top 5 ''@dbName'' as webid,* FROM dbo.tableName'
最佳搭档:
枚举所有DB的名称, 以逗号分隔输出
- 自动在多个DB上执行同一条sql语句 ( 存储过程版 )
- 自动在多个DB上执行同一条sql语句
- 在nhibernate中执行SQL语句和存储过程
- 在nhibernate中执行SQL语句和存储过程
- 在nhibernate中执行SQL语句和存储过程
- 在nhibernate中执行SQL语句和存储过程
- 在nhibernate中执行SQL语句和存储过程
- 在Oracle中不通过存储过程一次执行多条SQL语句Oracle PL/SQL
- 在Oracle中不通过存储过程一次执行多条SQL语句Oracle PL/SQL
- 在SQL Server启动时自动执行存储过程
- 存储过程里面执行SQL语句
- 存储过程中执行参数SQL语句
- 存储过程中执行动态Sql语句
- mysql存储过程执行动态sql语句
- 存储过程中执行动态Sql语句
- 存储过程中执行动态Sql语句
- 存储过程中执行动态Sql语句
- 存储过程中执行动态Sql语句
- Asp.net MVC学习日记四(如果无法Route,指向自定义的错误页面)
- 合理的使用行与行之间的空白空间
- linux logo的格式
- 实用推荐:24个很酷的Linux/Unix工具(1)
- BP算法浅谈(Error Back-propagation)
- 自动在多个DB上执行同一条sql语句 ( 存储过程版 )
- TCP Socket编程实例1---Sever端
- Linux下GCC使用方法简介
- js 调用父窗口函数-iframe父窗口和子窗口相互的调用方
- Vs中高亮HLSL关键字
- vbscript 中对excel常见操作[转]
- 好久没有写什么东西了。。。。
- FreeScada项目启动
- 修改linux系统默认语言