1.如果有ID欄位,就是具有唯一性的欄位 複製代碼 代碼如下:delect table where id not in ( select max(id) from table group by col1,col2,col3... ) group by 子句後跟的欄位就是你用來判斷重複的條件,如只有col1,那麼只要col1欄位內容相同即表示記錄相同。 2. 如果是判斷所有欄位也可以這樣 複製代碼 代碼如下:select * into #aa from table group by id1,id2
其實不光是上面描述的情況會鎖住表,還有很多種情境會使表放生死結,解鎖其實很簡單,下面用一個樣本來講解: 1 首先建立一個測試用的表: 複製代碼 代碼如下:CREATE TABLE Test ( TID INT IDENTITY(1,1) ) 2 執行下面的SQL語句將此表鎖住: 複製代碼 代碼如下:SELECT * FROM Test WITH (TABLOCKX) 3 通過下面的語句可以查看當前庫中有哪些表是發生死結的: 複製代碼 代碼如下:SELECT request_session_id
複製代碼 代碼如下:USE TestDB declare @conversation uniqueidentifier while exists (select 1 from sys.transmission_queue ) begin set @conversation = (select top 1 conversation_handle from sys.transmission_queue ) end conversation @conversation with cleanup
複製代碼 代碼如下:--代碼一DECLARE @cc INT SELECT NewsId,ROW_NUMBER() OVER(ORDER BY SortNum DESC) AS RowIndex INTO #tb FROM news WITH(NOLOCK) WHERE NewsTypeId=@NewsTypeId AND IsShow=1 SET @cc = @@ROWCOUNT SELECT n.* FROM news AS n WITH(NOLOCK), #tb As t WHERE t.
SQL Server本身提供了這麼一個DMV來返回這些資訊,它就是sys.dm_exec_sessions 。 比如在我的機器上做一下查詢:複製代碼 代碼如下:SELECT * FROM sys.dm_exec_sessions WHERE host_name IS NOT NULL 我們也可以根據登入名稱來分組:複製代碼 代碼如下:SELECT login_name ,COUNT(session_id) AS session_count FROM
實現以上要求,我們可以用以下幾種方式,但是效率卻相差很遠。 首先我們在Order表中,建立一個索引: CREATE UNIQUE INDEX idx_eid_odD_oidD ON Orders(EmployeeID,OrderDate DESC,OrderID DESC) 多個OrderId是為了在OrderData相同的情況下,按訂單號倒序,是個輔助屬性。 方法1: 複製代碼 代碼如下:SELECT EmployeeID,OrderID FROM Orders AS O1
Ø 基本常用查詢 --select select * from student; --all 查詢所有 select all sex from student; --distinct 過濾重複 select distinct sex from student; --count 統計 select count(*) from student; select count(sex) from student; select count(distinct sex) from student;
錯誤:圖一 如果不能很好地執行登入觸發器,那麼將會導致登入失敗。 例如,如果建立了這個觸發器,那麼就可以設計下面的代碼來達到失敗的目的。複製代碼 代碼如下:CREATE TRIGGER BadLogonTrigger ON ALL SERVER FOR LOGON AS BEGIN INSERT INTO BadDB.dbo.SomeTable VALUES ('Test'); END; GO
修改: 複製代碼 代碼如下:declare proccur cursor for select [name] from sysobjects where name like 'Foods_%' declare @procname varchar(100) declare @temp varchar(100) open proccur fetch next from proccur into @procname while(@@FETCH_STATUS = 0) begin set @temp='
SQL Server推薦使用 SET 而不是 SELECT 對變數進行賦值。當運算式返回一個值並對一個變數進行賦值時,推薦使用 SET 方法。下表列出 SET 與 SELECT 的區別。請特別注意紅色部分。 setselect同時對多個變數同時賦值不支援支援運算式返回多個值時出錯將返回的最後一個值賦給變數運算式未傳回值變數被賦null值變數保持原值下面以具體樣本來說明問題:create table chinadba1(userid int ,addr varchar(128)