sqlserver用戶表
❶ sqlserver的系統表
1、查看錶和試圖
SELECT * FROM sys.objects WHERE object_id = object_id('表名或視圖名')
在sqlserver中一般可通過查詢sys.objects系統表來得知結果,不過可以有更方便的方法
如下:
if object_id('tb_table') is not null
print 'exist'
else
print'not exist'
如上,可用object_id()來快速達到相同的目的,tb_table就是我將要創建的資源的名稱,所以要先判斷當前資料庫中不存在相同的資源
object_id()可接受兩個參數,第一個如上所示,代表資源的名稱,上面的就是表的名字,但往往我們要說明我們所要創建的是什麼類型的資源,
這樣sql可以明確地在一種類型的資源中查找是否有重復的名字,如下:
if object_id('tb_table','u') is not null
print 'exist'
else
print'not exist'
第二個參數 "u" 就表示tb_table是用戶創建的表,即:USER_TABLE地首字母簡寫
查詢sys.objects中可得到各種資源的類型名稱(TYPE列),這里之舉幾個主要的例子
u ----------- 用戶創建的表,區別於系統表(USER_TABLE)
s ----------- 系統表(SYSTEM_TABLE)
v ----------- 視圖(VIEW)
p ----------- 存儲過程(SQL_STORED_PROCEDURE)
2、查看錶的列名
select * from syscolumns where id=object_id('表名') and name='列名'
3、查看資料庫
select * from sys.databases where name = 'student'
4、查看備份設備
"select * from sys.backup_devices where name ='backupdb'
(添加備份設備:exec sp_admpdevice 'disk','backupdb','d:\\backup\\backupdb.bak')
5、查看數據文件
select name, physical_name dbfile from sys.master_files where database_id=db_id('student')
master資料庫中sysdatabases表(是sqlserver中所有的資料庫的庫名) :
如果你要查詢的是所有資料庫(用戶/系統):
select * from master..sysdatabases
如果你要查詢的是用戶資料庫,則使用:
select * from master..sysdatabases where dbid > 4
如果你要查詢的是系統資料庫,只需要把where字句改為dbid < 4即可。
6、查看執行的sql語句
SELECT cacheobjtype,objtype,usecounts,sql
from sys.syscacheobjects where sql not like'%cach%' and sql not like '%sys.%'
2.對應資料庫中sysobjects表(反應的是相應資料庫中所有的對象):
這個表的用處是最大的,因為它裡面存放的有:表(系統/用戶)、存儲過程(系統/用戶)、視圖、主鍵、外鍵等。
這里就不一一說明了。
比如你sqlserver中有個資料庫名叫 test,如果要查詢該資料庫中的所有表對象:
select * from test..sysobjects where type = 』u』 or type = 』s』
這里的type = 』u』是表示用戶表對象,type = 』s』是系統表對象,怎樣單獨查詢用戶表對象或者系統表對象就不用說了吧。
如果你要查詢的是存儲過程當然也分了系統和用戶了:
這個是查詢資料庫中所有存儲過程
select * from test..sysobjects where type = 』p』
如果你要查詢的是用戶存儲過程則加上 and category <> 2 即可。
查詢系統存儲過程就不用說了吧(category = 2 誰不知道。。。)
查詢視圖與查詢存儲過程一樣,比如:
你查詢的是資料庫中所有視圖
select * from test..sysobjects where type = 』v』
如果你要查詢的是用戶視圖則加上 and category <> 2 即可。
其他的就不說了,就把 它們的type給大家說下:
type = 』 pk』 表示主鍵。
type = 』 d』 外鍵引用。
type = 』uq』 唯一索引。
下面附錄一些常用系統表
名稱 地址 說明
sysaltfiles 主資料庫 保存資料庫的文件
syscharsets 主資料庫 字元集與排序順序
sysconfigures 主資料庫 配置選項
syscurconfigs 主資料庫 當前配置選項
sysdatabases 主資料庫 伺服器中的資料庫
syslanguages 主資料庫 語言
syslogins 主資料庫 登陸帳號信息
sysoledbusers 主資料庫 鏈接伺服器登陸信息
sysprocesses 主資料庫 進程
sysremotelogins主資料庫 遠程登錄帳號
syscolumns 每個資料庫 列
sysconstrains 每個資料庫 限制
sysfilegroups 每個資料庫 文件組
sysfiles 每個資料庫 文件
sysforeignkeys 每個資料庫 外部關鍵字
sysindexs 每個資料庫 索引
sysmenbers 每個資料庫 角色成員
sysobjects 每個資料庫 所有資料庫對象
syspermissions 每個資料庫 許可權
systypes 每個資料庫 用戶定義數據類型
sysusers 每個資料庫 用戶
❷ Sqlserver中如何保證每個用戶的表不互相影響
這個你無須擔心,資料庫本身具備上鎖功能,如果一個用戶在修改一條語句沒有執行完成前,其他用戶是無法執行其他操作的。只是他們執行的時間非常快,我們感覺不出來而已
❸ sqlserver 如何去掉用戶表名的前綴
-- 對於 SQL Server 2000,表所屬的架構與所有者是一致的,更改表的所有者即可
exec sp_changeobjectowner 'Tianqi.[OrdersTable]', 'dbo'
-- 對於 SQL Server 2005,表所屬的架構與所有者是分離的,需要將表移動到指定架構下
ALTER SCHEMA dbo TRANSFER [Tianqi].[OrdersTable];
-- 為了管理方便,修改表的所有者
ALTER AUTHORIZATION ON object::[Tianqi].[Tianqi].[OrdersTable] TO SCHEMA OWNER;
❹ sqlserver 怎麼查詢表屬於哪個用戶,或者說,某用戶名可訪問那些表
打開sql管理工具, ——安全性——登錄名——右擊用戶,查看屬性——可以看到用戶映射幾個資料庫。
❺ 如何在sqlserver系統表中獲得用戶表的修改時間,MSSQL,資料庫
如果你希望知道用戶表的結構的修改時間,
你可以到系統表中去找,比如:sysobjects,syscolumns
如果你希望或者表中數據的修改時間,那麼沒有的,只有自己維護一個數據修改列,在程序中維護,或者通過觸發器維護。
❻ 如圖設計SQLServer資料庫表,一個基礎的用戶信息表(不用設計)!
設計成樹形的可以,就像行政區域樹一樣,可以上網查一下,每個職位設置代碼,再用代碼關聯起來的。
❼ 請問SQLServer2005 中的用戶名 在哪個系統資料庫的什麼表中
SELECT
name,
isntname
--1
=
帳戶是
Windows
群組或
Windows
使用者
0=SQL
Server
使用者。
FROM
sys.sysusers
WHERE
islogin
=
1
--
1
=
帳戶是具有登入帳戶的
Windows
群組、Windows
使用者或
SQL
Server
使用者。
AND
hasdbaccess
=
1
--
1
=
帳戶有資料庫存取權。
AND
(issqluser=1
--
1
=
帳戶是
SQL
Server
使用者。
OR
isntname=1)
--
1
=
帳戶是應用程式角色。
--或用
SELECT
Name,
type_desc
FROM
sys.database_principals
WHERE
type
IN('S','U','G')
AND
Sid
IS
NOT
null
❽ 在sqlserver里查詢的時候,怎麼實現多個用戶id顯示出用戶表的用戶名
第一個表結構有問題:我理解的應該是id為一個欄位,menbers為一個欄位(表B的外鍵)
id menbers(id和menbers為聯合主鍵)
1 1
1 2
1 3
1 6
1 8
2 2
...
我不理解你表A menber欄位s是怎能存儲的,不是數組吧?這個我不清楚。
查詢的時候直接select A.id B.name from A , B where A.menbers = B.id;就行
❾ 如何用sql語句遍歷一個用戶表,然後在數據表為每個用戶添加一條新記錄
sql語句遍歷一個用戶表 涉及到循環操作 ,添加紀錄就是簡單的insert操作
不同的資料庫的稍有不同。
還要處理資料庫表主鍵的不同設置情況。
循環操作+添加操作的案例:(oracle)
1:主鍵採用自加方式實現
delete from whilestu1;
commit;
DECLARE
num1 number;
maxstuid number;
age number;
begin
num1 := 1;
WHILE num1 <= 100 LOOP
--獲取最大的stuid
select max(stuid) + 1 into maxstuid from whilestu1;
--dbms_output.put_line(maxstuid);
if maxstuid is null then
maxstuid := 1;
--dbms_output.put_line('r');
end if;
age := ROUND(DBMS_RANDOM.VALUE(18, 40), 0);
--插入數據
insert into whilestu1
(stuid, stuName, age)
values
(maxstuid, '學員' || cast(maxstuid as varchar2(50)), age);
commit;
num1 := num1 + 1;
END LOOP;
end;
/
2:使用觸發器聲稱主鍵的方式
CREATE OR REPLACE TRIGGER trg_whilestu2
BEFORE INSERT OR UPDATE OF stuid
ON whilestu2
FOR EACH ROW
BEGIN
IF INSERTING THEN
SELECT SEQ_whilestu2.NEXTVAL INTO :NEW.stuid FROM DUAL;
ELSE
RAISE_APPLICATION_ERROR(-20020, '不允許更新ID值!');
END IF;
END;
/
delete from whilestu2;
select * from whilestu2;
commit;
--select SEQ_whilestu2.Nextval from al;
DECLARE
num1 number;
maxstuid number;
age number;
begin
num1 := 1;
WHILE num1 <= 100 LOOP
age := ROUND(DBMS_RANDOM.VALUE(18, 40), 0);
select SEQ_whilestu2.Currval + 1 into maxstuid from al;
--插入數據
insert into whilestu2
(stuName, age)
values
('學員' || cast(maxstuid as varchar2(50)), age);
commit;
num1 := num1 + 1;
END LOOP;
end;
/
3:使用GUID生成主鍵的方式
select sys_guid() from al;
DECLARE
num1 number;
--maxstuid number;
age number;
stuid raw(16);
begin
num1 := 1;
WHILE num1 <= 100 LOOP
age := ROUND(DBMS_RANDOM.VALUE(18, 40), 0);
select sys_guid() into stuid from al;
--插入數據
insert into whilestu3
(stuid, stuName, age)
values
(stuid, '學員' || cast(num1 as varchar2(50)), age);
commit;
num1 := num1 + 1;
END LOOP;
end;
/