J'ai besoin de sélectionner un tas de données dans une table temporaire pour ensuite, faire un peu secondaire calculs; Pour vous aider à travailler plus efficacement, je voudrais avoir une IDENTITÉ, d'une colonne d'un tableau. Je sais que je déclare d'abord la table avec une identité, puis insérez le reste des données, mais est-il un moyen de le faire en 1 étape?
Réponses
Trop de publicités?Ô gens de peu de foi:
SELECT *, IDENTITY( int ) AS idcol
INTO #newtable
FROM oldtable
http://msdn.microsoft.com/en-us/library/aa933208(SQL.80).aspx
Vous avez dit: ne fonctionne pas si oldtable a une colonne d'identité.
Je pense que c'est votre réponse. Le #nouvelletable obtient une colonne d'identité de la oldtable automatiquement. Le prochain déclarations:
create table oldtable (id int not null identity(1,1), v varchar(10) )
select * into #newtable from oldtable
use tempdb
GO
sp_help #newtable
Il vous montre que #nouvelletable n'ont la colonne d'identité.
Si vous ne voulez pas l'identité de la colonne, essayer à la création de #nouvelletable:
select id + 1 - 1 as nid, v, IDENTITY( int ) as id into #newtable
from oldtable
Bonne Question & Matt était une bonne réponse. Afin d'étendre la syntaxe un peu si le oldtable a une identité d'un utilisateur peut exécuter les opérations suivantes:
SELECT col1, col2, IDENTITY( int ) AS idcol
INTO #newtable
FROM oldtable
--
Qui serait le cas si le oldtable a été écrit quelque chose comme tels:
CREATE TABLE [dbo].[oldtable]
(
[oldtableID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[col1] [nvarchar](50) NULL,
[col2] [numeric](18, 0) NULL,
)
Thx 4 l'info, cette question m'a aidé,
Catto
Si vous souhaitez inclure la colonne qui est l'identité actuelle, vous pouvez toujours le faire, mais vous devez explicitement la liste des colonnes et fonte d'identité en cours pour un int (en supposant qu'il est maintenant), comme ceci:
select cast (CurrentID as int) as CurrentID, SomeOtherField, identity(int) as TempID
into #temp
from myserver.dbo.mytable
Pour rendre les choses efficace, vous devez faire déclarer que l'une des colonnes de clé primaire:
ALTER TABLE #mytable
ADD PRIMARY KEY(KeyColumn)
Qui ne prend pas une variable pour le nom de la colonne.
Faites-moi confiance, vous êtes BEAUCOUP mieux de faire un : CRÉER #TABLE myTable (ou, éventuellement, de DÉCLARER le TABLEAU @matable) , qui permet de définir l'IDENTITÉ et la CLÉ PRIMAIRE directement.