SQL日報
⑴ 怎麼用sql語句實現某個欄位數為隨機數,如一個表裡的學號欄位,怎麼讓這個學號自動生成7位數的隨機數
1、以某整數欄位為種子(沒有的話要生成一個)
2、通過RAND函數生成一個0-1之間的隨機數。如0.7136106261841817
3、然後轉換成文本型
4、再取後7位即可RIGHT(CONVERT(VARCHAR,RAND(序號)),7) 。
具體語句如下:
如果表中有一個欄位為整型的序號或標識列,那麼就可以以序號為種子生成隨機的學號欄位。
UPDATE TABLENAME SET 學號=RIGHT(CONVERT(VARCHAR,RAND(序號)),7) WHERE 序號 IS NOT NULL
如果沒有整型的序號或標識列,就要根據表中能夠唯一標識確定某行的關鍵欄位來生成學號,如ID
UPDATE TABLENAME SET 學號=RIGHT(CONVERT(VARCHAR,rand((select count(1) from tablename a where a.id>=tablename.id))),7)
⑵ SQL中的日期型常量具體指的是什麼
日期型常量的表示方法稍微復雜一些。需要用{}將年、月、日括起,而年、月、日之間用分隔符分隔。分隔符有斜杠(/)、連字型大小(-)、西文句號(.)和空格等。在書寫一個日期常量時,可以使用任何一個分隔符,但系統顯示一個日期量時,默認的是斜杠(/)。可以使用SET MARK TO[日期分隔符]命令指定系統顯示日期量時使用的分隔符。
例如,在命令窗口中輸入下面的命令:
SET MARK TO [/]
?{^1999.10.02}
SET MARK TO [-]
?{^1999/10/02}
主屏幕兩次顯示的日期是:
10/02/99
10-02-99
日期型常量的書寫格式有兩種:嚴格的日期格式和傳統的日期格式。
嚴格的日期格式需要在左括弧後面加上字元^,格式為{^yyyy-mm-dd},例如{^1999-10-02}。嚴格的日期格式規定:年份必須是4位數字,年月日的順序不能顛倒,年月日三項均不能預設。
傳統的日期格式為:{mm/dd/yy},例如{10/02/99}。年月日的順序可以通過SET DATE TO命令改變。
⑶ SQL資料庫時提示對象名'XXX' 無效,什麼原因
原因一:新建的資料庫,沒有將初始數據導入到新庫里。
解決方法:
請登錄到我司資料庫控制面板->備份還原系統,然後使用資料庫還原的功能,在那裡直接將您的資料庫備份上傳還原,如果操作過程沒有出現錯誤,一般您的資料庫就已經還原了,此方法適合還原一些初始數據不是很大的資料庫(30M以內),如果您的資料庫初始數據很大,在線上傳還原的成功率比較低,這時請使用資料庫導入導出的方法進行還原,詳細的導入導出方法請查看我司的另一篇幫助文檔資料庫導入導出方法詳解
原因二:資料庫做過遷移,新資料庫的對象所有者名稱不同造成
資料庫做了遷移後,一般會進行導入/還原數據的過程,在這個過程中,要注意新資料庫的完整對象名與原來是一致的。
比如,您的舊資料庫名叫 db1 , 舊資料庫用戶是 dbuser1, 現在要遷移到新的資料庫上,新資料庫名是 db2, 新資料庫用戶是 dbuser2。
sqlserver對象的完整對象名是資料庫名.用戶名.表名這樣的,假設你的舊資料庫上有個表名叫 table1,那它的完整對象名就是 db1.dbuser1.table1,
當你用新的資料庫名登錄導入舊數據時,新的表名可能變成了 db2.dbuser2.table1,這樣的話,您的程序查詢數據時可能會出現對象名無效的錯誤。
解決方法:要解決這個問題,一般需要做兩步操作:
1. 請分別使用sp_changeobjectowner '這里改為資料庫完整對象名','dbo'這個命令將所有的用戶表,用戶視圖,用戶存儲過程等的所有者全部改為系統內建的特殊用戶dbo
以下是一個可以簡化執行上面操作的存儲過程,以下存儲過程運行後可能還會有部分的對象改不到所有者,這時請手動執行上面的命令將未能改所有者的對象重新嘗試一下。
declare @CrsrVar cursor
declare @pname varchar(40) --對象名
declare @oldowner varchar(40) --原對象所有者
declare @objfullname varchar(80) --原對象全名
set @oldowner = '這里改為數據表/視圖/存儲過程等的舊所有者名稱'
set @CrsrVar = Cursor For select name from sysobjects where xtype='U' --xtype=U 表示用戶表
open @CrsrVar
fetch next from @CrsrVar into @pname
while(@@fetch_status=0)
begin
set @objfullname = @oldowner + '.' + @pname
exec sp_changeobjectowner @objname=@objfullname,@newowner='dbo' --dbo為所有者名
fetch next from @CrsrVar into @pname
end
close @CrsrVar
deallocate @CrsrVar
2. 可能您的編寫網站程序的時候沒有注意通用性,在查詢數據時採用了類似select * from dbuser1.table1這樣的SQL語句,一般來說,這不是一個好的習慣,在這種情況下,如果資料庫遷移過的話,經常會導致對象名無效的錯誤,為了避免這種不必要的問題,建議您在程序中查詢數據時,直接用select * from table1這樣的方式,就是在程序中不在用對象的完整名稱,而是單使用表名或視圖名,這樣就可以避免不必要的「對象名無效」的問題。