WEB开发网
开发学院数据库MSSQL Server 如何同时对多个表或列操作 阅读

如何同时对多个表或列操作

 2007-11-11 07:34:13 来源:WEB开发网   
核心提示: --Execute the SQL statement supplied in @SQL parameter on every row of Cursor’s data --对于每一行游标取出的数据,执行由@SQL参数传进来的SQL语句 WHILE @@FETCH_STATUS = 0 BEGIN --Cons

  --Execute the SQL statement supplied in @SQL parameter on every row of Cursor’s data
 --对于每一行游标取出的数据,执行由@SQL参数传进来的SQL语句
 WHILE @@FETCH_STATUS = 0
 BEGIN
 --Construct SQL2 to Execute supplied @SQL 
 --by replacing @TABLENAME, @COLUMNNAME with running Table Name, Column Name of Cursor’s data
 --用游标取出的表名列名来替换@SQL中的@TABLENAME, @COLUMNNAME来构造SQL2
 SET @SQL2 = @SQL
 SET @SQL2 = REPLACE(@SQL2, ’@TABLENAME’, @sTableName)
 SET @SQL2 = REPLACE(@SQL2, ’@COLUMNNAME’, @sColumnName)

 --Execute the constructed SQL2
 --执行SQL2
 EXECUTE sp_executesql @SQL2
 
 --Check for errors
 --检查错误
 IF @@ERROR <> 0
 BEGIN
  --On Error, Destroy objects, Rollback transaction
  --Return -1 as UNSUCCESSFUL flag
  --如果发生错误,删除游标,回滚
  --返回错误标记 -1
  PRINT ’Error occurred’
  DEALLOCATE TabColCursor
  ROLLBACK TRANSACTION gDatabaseTrans
  RETURN -1
 END
 --Process Next Row of Cursor
 --进行下一行数据
 FETCH NEXT FROM TabColCursor
 INTO @sTableName,@sColumnName
 END
 --Destroy CURSOR object
 --删除游标
 DEALLOCATE TabColCursor
 --Procedure executed properly. Commit the Transaction.
 --Return 0 as SUCCESSFUL flag
 --成功完成存储过程,成功结束事务
 --返回成功标记 0
 COMMIT TRANSACTION gDatabaseTrans
 RETURN 0
END

使用例子

1、这个例子在NORTHWIND数据库上执行
把所有表中列名包含Name的列中,把以“Ltd.”结尾的列替换成“LIMITED”。
用 SELECT * FROM Suppliers检查运行结果!
EXEC SP_execSQLonDB
’’,      --没有表名条件,针对所有表
’%Name%’,   --列名条件,列名包含“Name”字符串
’UPDATE @TABLENAME SET @COLUMNNAME = REPLACE(@COLUMNNAME,’’Ltd.’’,’’LIMITED’’)
    WHERE @COLUMNNAME LIKE ’’%Ltd.’’’,    --UPDATE 语句
’N’      --不包含NTEXT,TEXT,IMAGE数据类型 

2、这个例子也在NORTHWIND数据库上执行
统计所有表中列名包含Name的列的值是“QUICK-Stop”的数量
create table ##TMP1 (table_name varchar(200),column_name varchar(200),rou_count int)
exec SP_execSQLonDB
’’,
’%Name%’,
’DECLARE @iCount as int
   SELECT @iCount=COUNT(1) FROM @TABLENAME WHERE @COLUMNNAME = ’’QUICK-Stop’’
   IF @iCount >0
         INSERT INTO ##TMP1 SELECT ’’@TABLENAME’’,’’@COLUMNNAME’’,@iCount’,
’N’
select * from ##TMP1

3、这个例子自己理解
针对所有以“EMPLOYEE”开头的表,以“DEPT”开头的字段执行存储过程。
EXEC SP_execSQLonDB
’EMPLOYEE%’,
’DEPT%’,
’EXEC USP_DeptStates ’’@TABLENAME’’,’’@COLUMNNAME’’’,
’N’

4、还是自己理解
对@TABLENAME @COLUMNNAME参数给于多个值!
EXEC SP_execSQLonDB
’EMPLOYEE%,PF%’,
’SALARY,%AMOUNT%’,
’EXEC USP_EMPLOYEE_PF ’,
’N’

上一页  1 2 

Tags:如何 同时 多个

编辑录入:coldstar [复制链接] [打 印]
赞助商链接