[tips]T_SQL @ 2000 AND 2005

本文提供了一系列针对 SQL Server 的实用技巧,包括创建数据库图表、管理存储过程、使用游标进行数据处理、链接服务器操作、解决插入数据失败问题、XML 控制、PIVOT 查询、重建索引以减少碎片化、更新数据表策略,以及更名 SQL Server 后的故障排除。这些技巧覆盖了 SQL Server 的多个方面,旨在帮助用户提高数据库管理和查询效率。

if you can't create database diagrams on SQL server, execute the following T-SQL

None.gifUSE [master]
None.gif
GO
None.gif
EXEC dbo.sp_dbcmptlevel @dbname='CMDB'@new_cmptlevel=90
None.gif
GO
None.gif
None.gif
ALTER AUTHORIZATION ON database::dbname TO sa
None.gif


Cursor

None.gif-- Declare a cursor
None.gif
DECLARE custom_cursor CURSOR
None.gif 
None.gif
FOR    SELECT EmployeeID, LastName, FirstName FROM Employees
None.gif
None.gif
-- declare a temporary various
None.gif
DECLARE @tmopEmployeeID INT
None.gif
DECLARE @LastName varchar(50)
None.gif
DECLARE @FirstName varchar(50)
None.gif
None.gif
-- open the cursor
None.gif
OPEN custom_cursor
None.gif
None.gif
--GET THE NEXT RECORD
None.gif
FETCH NEXT FROM custom_cursor INTO @tmopEmployeeID , @LastName@FirstName
None.gif
None.gif
-- GET SUCCESSFULLY
None.gif
WHILE @@FETCH_STATUS = 0
None.gif
None.gif
BEGIN 
None.gif    
PRINT CONVERT(VARCHAR(20), @tmopEmployeeID+''+ @LastName + '.'+ @FirstName
None.gif    
FETCH NEXT FROM custom_cursor INTO @tmopEmployeeID , @LastName@FirstName
None.gif
END
None.gif
None.gif
--DELETE THE CURSOR
None.gif
DEALLOCATE custom_cursor

 

None.gif--查询某一个库的所有存贮过程
None.gif
select * from sysobjects where type='P'     这是查出所有存储过程的名称等信息 
None.gifsp_helptext 
[存储过程名]                            可以看到存储过程定义语句 
None.gif
select * from sysobjects where type='V'     这是查出所有视图的名称等信息 取出某个视图的生成该视图的SQL语句 

 

None.gif--链接服务器,用于不同种类或者服务器之间操作数据
None.gif
Use DBNAME
None.gif
GO 
None.gif
--add link server--
None.gif
Exec sp_addlinkedserver @server = 'linkedservername'@srvproduct=N'SQL Server' 
None.gif
GO 
None.gif
-- list linked server--
None.gif
Exec sp_linkedservers 
None.gif
Go 
None.gif
--delete data before insert
None.gif
delete from tablename
None.gif
GO 
None.gif
-- insert data to the table
None.gif
insert tablename select distinct * from linkedservername.DBNAME.dbo.tablename
None.gif
GO 
None.gif
-- delete the linked server--
None.gif
Exec sp_dropserver 'hkhkpapt01' 


when insert data, if you can't do successfully, pls note IDENTITY, change the column not as IDENTITY first, after finished to insert, change back

 

 

---处理sql for xml时的控制问题

当我们把查询结果作为xml输出的时候,如果有值为空值,应该怎么办呢?

 

 

ContractedBlock.gifExpandedBlockStart.gifCode
select * from tablename
for xml auto, elements xsinil

 

 

--pivot

 

ContractedBlock.gifExpandedBlockStart.gifCode
select * from
(
    
select Currency, sum(cost) as CurCount 
    
from dataTable
    
group by Currency
AS H
PIVOT 

Sum(H.CurCount) for 
H.Currency 
in ([RMB],[USD])
)
AS C

 

 

如果还想获取更详细的信息,可以添加 type,或者xmlschema参数,获取更为详细的信息

 

 

 

---index: view the internal and external index fragmentation, and then rebuild or reorganize the index

 

ContractedBlock.gifExpandedBlockStart.gifCode
--Determine index fragmentation for all tables in the AdventureWorks database
SELECT OBJECT_NAME(dt.object_id), si.name,
dt.avg_fragmentation_in_percent, dt.avg_page_space_used_in_percent
FROM
(
SELECT object_id, index_id, avg_fragmentation_in_percent, avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID('DB_NAME'), NULLNULLNULL'DETAILED')
WHERE index_id <> 0as dt --does not return information about heaps
INNER JOIN sys.indexes si
ON si.object_id = dt.object_id
AND si.index_id = dt.index_id


alter index index_name on table_name reorganize/rebuild

 

 

不使用游标更新数据表的思路是

1 移动当前表的数据到临时表

2 根据条件获取需要更新的数据

3 一个select,结合1和2,然后insert到目标表中去

ok

--------2009华丽分割线---- 

如果你更改多SQL server的名字,那么在有的时候,会出现14262的错误,比如在操作ship log的时候。

查看sql server的名字和现在你的服务器的名字是否一致

select * from sys.sysservers

如果不一致,执行下面两个存储过程,然后重启Windows

sp_dropserver 'servername'

go

sp_addserver 'servername'

 

ok, 问题搞定

 

对于上面这个问题的进一步更新

SELECT @@SERVERNAME

USE master
GO

--Drop old server name
EXEC sp_dropserver 'currentservername'
GO

--Add correct/ current server name
EXEC sp_addserver 'newservername', 'local'
GO

--restart the sql server service

SELECT @@SERVERNAME

 

 

转载于:https://www.cnblogs.com/yang_sy/archive/2008/03/25/1121215.html

BEGIN FOR rec IN ( select (t.OWNER || '.' || t.OBJECT_NAME) as table_1 from all_objects t where t.object_name in('PC_BILLING_PLAN','PC_CATALOG','PC_CATALOG_CATEGORY','PC_CATEGORY','PC_CATEGORY_ENTRY','PC_DSMP_SPBIZINFO','PC_DSMP_SPBIZINFO_CONF','PC_DSMP_SPINFO','PC_M2M_PRODBASEINFO','PC_M2M_SERVICE','pc_ms_execcode','pc_ms_opcode','PC_PRIV_CHARGE','PC_PRIV_CUSTGROUP_ALLOW','PC_PRIV_CUSTGROUP_FORBID','PC_PRIV_CUSTTYPE','PC_PRIV_PREPAY','PC_PRIV_PRESENT','PC_PRIV_PRESENTSCORE','PC_PRIV_RATEPLAN','PC_PRIV_SCHEME','PC_PROD_APPENDATTRNEW','PC_PROD_CONVERT','PC_PROD_CTRM_RELATE','PC_PROD_CUSTGROUP_ALLOW','PC_PROD_CUSTGROUP_FORBID','PC_PROD_EXTERNATTR','PC_PROD_GRPSTDPACK','PC_PROD_MEMADDPROD_CONDITION','PC_PROD_MEMPROD_FORBID','PC_PROD_NCODE_MAINPROD','PC_PROD_NCODE_MAP','PC_PROD_NCODE_RULE','PC_PROD_ORG_TYPE','PC_PROD_SALE_CATALOG','PC_PROD_SALE_CUSTGROUP','PC_PROD_SOLUTION','PC_PROD_SOLUTIONPRODS','PC_PROD_TELPATTERN','PC_PROD_USERDEFINE','PC_PROD_VIRTUAL_INCLUDE','PC_RWD_ACTION3RD','PC_RWD_ACTION_EXTEND','PC_RWD_REWARD_FEE','PC_RWD_REWARD_GOODS3RD','PC_RWD_REWARD_ORG','PC_RWD_REWARD_PROD','PC_RWD_SCORECHARGE','PC_RWD_TEMPLATE','PC_RWD_TPLTITEM','PC_RWD_TPLTORG','PC_RWD_TPL_REWARD','PC_SCORE_CONDITION','PC_SERV_CHANNEL','PC_SERV_OWE_SPINFO','PC_SERV_RESDEF','PC_TPLT_CHANNEL','PC_TPLT_ITEM','PC_TPLT_MAINPROD','PC_TPLT_ORG','PC_TPLT_RECEPTION','PC_TPLT_TEMPLET','pc_valid_item','pc_valid_opcode','pc_valid_opcode_items','SA_DB_APENDATTRDEF','SA_DB_CHARGEITEM','SA_DB_FEETYPE','SA_INTBOSS_BIPCODE','GRP_GROUP_ATTRRESTRICT','PC_PP_PRODUCT','PC_PRIV_APPENDATTR','PC_PRIV_CHANNEL','PC_PRIV_EXTERNATTR','PC_PRIV_ORG','PC_PRIV_RECDEF','PC_PRIV_RECEPTION','PC_PRIV_RELATION','PC_PRIV_TELPATTERN','PC_PRIV_USERDEFINE','PC_PRODUCT_SP','PC_PROD_AUTHTYPE','PC_PROD_CHANNEL','PC_PROD_CUSTTYPE','PC_PROD_HOME','PC_PROD_INCRMENT','PC_PROD_MAIN','PC_PROD_MATUREDEAL','PC_PROD_MEMPROD_CONDITION','PC_PROD_ORG','PC_PROD_PRESENT_DEF','PC_PROD_PRIVILEGE','PC_PROD_RECDEF','PC_PROD_RECEPTION','PC_PROD_RELATION','PC_PROD_RESOURCE','PC_PROD_RULE','PC_PROD_RULE_DEF','PC_PROD_SELECTTYPE','PC_PROD_SERVICE','PC_PROD_TIPS','PC_PS_SERVICE','PC_PS_SERVRELATION','PC_RWD_ACTION','PC_RWD_REWARD','PC_RWD_REWARD_GOODS','PC_RWD_REWARD_PACK','PC_RWD_REWARD_PACKITEM','PC_RWD_REWARD_SCORE','PC_SERV_APPENDATTR','PC_SERV_RESOURCE','SA_DB_GROUPTYPE' ) AND OWNER ='COMMON_DICT' AND t.object_type='TABLE' ) LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || rec; END LOOP; END; / 这啥意思,能不能实现
最新发布
08-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值