Ⅰ sql資料庫表的主鍵列設為標識,增量為1,下次插入數據時能不插入主鍵列嗎
這種情況使用xml來進行批量插入.
1.asp.net頁面上抓取數據,轉換成xml字元串
2.將這個字元串作為參數傳給存儲過程
3.存儲過程里,將這個xml讀取成臨時表
4.整個臨時表插入到目標數據表中,這個過程可以使用sql
server的事務;其實在這里用不用事務問題都不大了,因為存儲過程出錯,數據插不進去的,還會拋出異常到asp.net後台,讓後台進行處理異常.
您用游標或asp.net代碼來循環,速度會比較慢的.
Ⅱ 使用union查詢兩張表數據的時候如何把查詢的數據存放到臨時表中,且為臨時表創建主鍵,求sql語句
一條語句只能做到將表的數據放到臨時表,但是不能為臨時表創建主鍵的.
比如:create table temp_table as select * from table;
如果要創建主鍵的話,就只能寫到一個PL/SQL塊裡面
比如:
declare
begin
execute immediate 'create table temp_table as select * from table';
execute immediate 'alter table temp_table add constraint PK_id primary key on (col_id) ';
end;
Ⅲ sql如何創建臨時表
網上其實很多相關文章,你可以搜一下,並不一定需要在這里提問。
轉帖一篇給你吧
drop table #Tmp --刪除臨時表#Tmp
create table #Tmp --創建臨時表#Tmp
(
ID int IDENTITY (1,1) not null, --創建列ID,並且每次新增一條記錄就會加1
WokNo varchar(50),
primary key (ID) --定義ID為臨時表#Tmp的主鍵
);
Select * from #Tmp --查詢臨時表的數據
truncate table #Tmp --清空臨時表的所有數據和約束
相關例子:
Declare @Wokno Varchar(500) --用來記錄職工號
Declare @Str NVarchar(4000) --用來存放查詢語句
Declare @Count int --求出總記錄數
Declare @i int
Set @i = 0
Select @Count = Count(Distinct(Wokno)) from #Tmp
While @i < @Count
Begin
Set @Str = 'Select top 1 @Wokno = WokNo from #Tmp Where id not in (Select top ' + Str(@i) + 'id from #Tmp)'
Exec Sp_ExecuteSql @Str,N'@WokNo Varchar(500) OutPut',@WokNo Output
Select @WokNo,@i --一行一行把職工號顯示出來
Set @i = @i + 1
End
臨時表
可以創建本地和全局臨時表。本地臨時表僅在當前會話中可見;全局臨時表在所有會話中都可見。
本地臨時表的名稱前面有一個編號符 (#table_name),而全局臨時表的名稱前面有兩個編號符 (##table_name)。
SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表:
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)
如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則 SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL
Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在 tempdb 資料庫的 sysobjects 表中的臨時表,其全名由
CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名 table_name 不能超過
116 個字元。
除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。
所有其它本地臨時表在當前會話結束時自動除去。
全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的 Transact-SQL 語句完成後,將自動除去此表。
在
存儲過程或觸發器中創建的本地臨時表與在調用存儲過程或觸發器之前創建的同名臨時表不同。如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪
個表解析該查詢。嵌套存儲過程同樣可以創建與調用它的存儲過程所創建的臨時表同名的臨時表。嵌套存儲過程中對表名的所有引用都被解釋為是針對該嵌套過程所
創建的表,例如:
CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO
下面是結果集:
(1 row(s) affected)
Test1Col
-----------
1
(1 row(s) affected)
Test2Col
-----------
2
當創建本地或全局臨時表時,CREATE TABLE 語法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時表中指定
FOREIGN KEY 約束,該語句將返回警告信息,指出此約束已被忽略,表仍會創建,但不具有 FOREIGN KEY 約束。在 FOREIGN
KEY 約束中不能引用臨時表。
考慮使用表變數而不使用臨時表。當需要在臨時表上顯式地創建索引時,或多個存儲過程或函數需要使用表值時,臨時表很有用。通常,表變數提供更有效的查詢處理。
Ⅳ SQL語言中,原先建好的表沒有設置主鍵,現在設置了,沒法保存了。
單擊SQL
Server的「工具」→「選項」
單擊「Designers」,然後勾選掉「阻止保存要求重新創建表的更改」復選框。以後再修改sqlserver的數據結構,就不會提示無法保存啦!
Ⅳ 如何更改SQL資料庫中的主鍵數據
主鍵就是用來標識每條記錄的,它必須具有唯1性,同時它也具有唯1聚集索引的功能,方便查找記錄,用主鍵查找記錄是最高效的,但是主鍵不1定是單唯一列,可以由多列共同組成主鍵
Ⅵ 用SQL語句創建一個臨時表,建立主鍵約束,並驗證主鍵約束是否可以被修改。
create table #temp(id int identity(1,1) primary key,name nvarchar(6))
insert #temp (name)
select 'aa'
union all
select 'bb'
select * from #temp
update #temp set id=11 where id=1
消息
消息 8102,級別 16,狀態 1,第 2 行
無法更新標識列 'id'。
結論:臨時表可以有主鍵約束,但不能被更新
Ⅶ SQL 我設置了主鍵 然後主鍵就唯一了,不能添加重復項,很懊惱啊!
資料庫中表的主鍵就是唯一且不能為空的啊。。如果你不想的設置主鍵,你可以把表刪了重新創建啊。。把primary
key刪掉執行
Ⅷ sql 中是否可以把主鍵重新設置為非主鍵
樓主,你好!這個還是要看你的一個實際情況來看的。比如,你剛開始寫DDL語句時,那麼可以直接改掉就可以了;但是從你的問題來看,應該是已經通過DDL語句生成資料庫表了,並且很有可能在表中就已經存在數據了。如果是如我所描述的,那麼可以按如下方式來處理:
把資料庫做備份,不要在正式庫中直接修改。
首先,要了解哪些應用程序的代碼使用了這張表,並和這張表的這個主鍵欄位相關聯。
其次,確定這張表取消主鍵後,會設置哪個欄位為主鍵欄位?本來表中已經的記錄中,這個欄位的值是否重復?如果重復的話,那麼就不能調整。如果不重復的話,就可以調整。
最後,直接用DDL語句ALTER TABLE 的約束來調整主鍵欄位。
我只給你說了一個大致思路,具體操作還是需樓主自己動手。
Ⅸ SQL資料庫主鍵修改問題
這個問題想多了就變復雜了。
首先要確定除了你自己外沒有人操作資料庫;
更新表A中的主鍵、和另一個欄位;
更新B、C表中的AOID;
不需要關聯,都直接增加6000即可。
update A set oid=oid+6000,recipientcertificateid=recipientcertificateid+6000;
update B set AOID=AOID+6000;
update C set AIOD=AIOD+6000;
原理:
A表直接將欄位增加6000,而B與C表中外鍵需要相應修改,同時全表更新外鍵增加6000即可。
那就建一張臨時表,把數據導到臨時表,然後清空本表,再重新插入,插入的時候用新的OID規則。
Ⅹ SQL Server中怎樣在臨時表中創建索引
你說的是臨時表還是表變數?
如果是臨時表的話跟普通表沒有區別:
比如
CREATE TABLE #Test(a int,b int)
CREATE INDEX IX_test ON #Test(a)
如果是表變數不支持直接創建索引,但是可疑在聲明表變數的時候設置主鍵。
比如
declare @table table(id int IDENTITY PRIMARY KEY,a int,b int);