SQL Of SqlServer

SQL Of SqlServer

记录一些常用的sql语句。

Default Database

设置登录SQL Server时默认的数据库,减少不必要切换:默认数据库 --> 想要的数据库。

DECLARE @loginText nvarchar(256)
SELECT @loginText = SUSER_NAME()
EXEC sp_defaultdb @loginame = @loginText , @defdb = 'DatabaseName'

如果设置不成功,请用一个 SQL Server Authentication 账号设置。设置成功之后,默认的 Windows Authenticaiton 也能使用。

查询指定列的所有表名

--Query table by column
select tab.name as TableName, col.name as ColumnName 
from syscolumns col left join sys.tables  tab
on col.id= tab.object_id 
where col.name ='ColumnName'

--Fuzzy query table name
select  name as TableName
from sys.tables
where name like '%JOBEXT%
order by name'

整表导入新表备份和还原

要插入的表不能已存在。

select * into DatabaseName.dbo.A_Backup from DatabaseName.dbo.A

还原,要保证所有列的列名和顺序和类型是一致的,否则要指定具体的对应关系

INSERT INTO DatabaseName.dbo.A SELECT * FROM DatabaseName_Backup.dbo.A_Backup

一个表的数据导入另一张表

全部列数据。

insert into DatabaseName_Backup.dbo.A_Backup select * from DatabaseName.dbo.A

部分列数据。一些列需要根据限定条件设置默认值。

insert into DatabaseName_Backup.dbo.A_Backup(Number) SELECT Number FROM DatabaseName.dbo.A

根据表的行数执行操作

BEGIN TRANSACTION;  
DECLARE @rowCounter integer
SELECT @rowCounter = COUNT(1) FROM DatabaseName.dbo.A_Backup
PRINT @rowCounter
IF @rowCounter > 0
BEGIN
	PRINT 'ROLLBACK';
	ROLLBACK TRANSACTION;
END
ELSE
BEGIN
	PRINT 'COMMIT'
	COMMIT TRANSACTION
END

不执行后面SQL语句

RETURN

获取表的所有列名

SELECT * FROM sys.columns WHERE object_id=object_id('DatabaseName.dbo.A')

批量插入时每行数字增加1

ROW_NUMBER() OVER(ORDER BY (SELECT NULL))

查看存储过程

sp_helptext

游标

游标就是foreach,由SQL这种低级脚本语言编写非常繁琐,浪费了无数人的时间,掉了好多头发。站在现在的角度,当初设计SQL的人就像小丑一样造了一个这么难用的破玩意儿。

打赏