我的sql -- 非常实用

SQL执行次序
SQL数组参数
Fusion 分页
EXEC sp_changeobjectowner 'a0501233515.Orders''dbo'
游标
in 参数匹配列表
处理表重复记录(查询和删除)
如果存在Table则删除
行转列
C# catch 块俘获 SQL Server 抛出的自定义异常(RAISERROR)
Code
存储过程 -- 批量删除
declare   @str   varchar(8000)   
  
set   @str   =   ''   
  
select   @str   =   @str   +   ','   +   name   From   sysobjects   WHERE   xtype='P'   and   status>=0   
  
select   @str   =   'drop   proc   '   +   substring(@str,2,8000)   
  
select   @str    
  
exec   (@str

--执行即可

 

数据库同步 -- schema问题
问题描述: 
创建数据库时一般使用sa在本机创建, schema为dbo
而部署到实际机器时, 一般只有普通权限, schema为登陆名
这为同步时带来了一些困难.

解决方案:

1.使用SQLDelta生成脚本 (注意选项)

 
2.将schema全部替换为空, 让目标数据库自动生成

 

3.利用MSSQL自带的工具导出数据, 注意修改目标的schema, 以及勾选插入标识列

 

 

批量修改SCHEMA
1。在SQL Server 2005中批量修改存储过程的架构,执行以下SQL,将执行结果拷贝出来,批量执行既可。

SELECT 'ALTER SCHEMA 新的架构名称 TRANSFER ' + s.Name + '.' + p.Name 
FROM sys.Procedures p INNER JOIN sys.Schemas s on p.schema_id = s.schema_id 
WHERE s.Name = '旧的架构名称'

2。在SQL Server 2005中批量修改表的架构,执行以下SQL,将执行结果拷贝出来,批量执行既可。

declare @name sysname
declare csr1 cursor
for 
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
open csr1

FETCH NEXT FROM csr1 INTO @name
while (@@FETCH_STATUS=0)
BEGIN
SET @name='旧的架构名称.' + @name

print 'ALTER SCHEMA 新的架构名称 TRANSFER ' + @name
fetch next from csr1 into @name
END
CLOSE csr1
DEALLOCATE csr1

然后将个结果在执行一遍即可。 

 

 

posted on 2008-11-07 14:15  snowleopard  阅读(305)  评论(0)    收藏  举报

导航