2010-07-12 3 views
0

Quel est le problème avec ce T-SQL:Quel est le problème avec ce T-SQL?

DECLARE @temp TABLE(ID INT IDENTITY,[Value] VARCHAR(100)) 
SET @temp = dbo.[fnCSVToTable](',2,3') 
+0

message d'erreur? – pascal

+0

Le problème est dans votre fonction ou l'argument que vous lui passez. Besoin de SQL pour la fonction ou le message d'erreur réel. –

+0

À quoi ressemble fncsvtotable? Et comme @pascal a déclaré un message d'erreur ou une description de ce qui ne va pas aiderait? – spinon

Répondre

5

Je ne pense pas que vous pouvez attribuer à la variable de table comme ça (à moins qu'il est une chose nouvelle dans SQL 2008).

Au moins pour SQL2005, vous devez procéder comme suit.

DECLARE @temp TABLE(ID INT IDENTITY,[Value] VARCHAR(100)) 

INSERT INTO @temp 
SElECT [value] 
FROM dbo.[fnCSVToTable](',2,3') 
3

De la documentation pour SET (SQL 2008; SQL 2005) (je souligne):

@ local_variable

est le nom d'une variable de tout type, sauf curseur, texte, ntext, image, ou tableau.

Pour remplir une variable de table, utilisez

INSERT @table_variable 
SELECT columns 
FROM dbo.fnTableValuedFunction 
+0

Les documents disent ce qui suit: Il n'y a pas de table incluse dans la clause except. @local_variable Nom d'une variable de tout type sauf le curseur, le texte, ntext ou l'image. Les noms de variables doivent commencer par un au signe (@). Les noms de variables doivent être conformes aux règles relatives aux identificateurs. Pour plus d'informations, voir Utilisation des identifiants. – teenup

+0

@Puneet Dudeja a ajouté des liens aux pages MSDN pertinentes * que je cite directement *. La seule page de ce type que je puisse trouver et qui * ne mentionne pas «table» est la page SQL * 2000 * (http://msdn.microsoft.com/fr-fr/library/aa259193%28SQL.80%29.aspx), mais SQL 2000 n'a pas * de * variables de table, donc naturellement elles ne sont pas mentionnées. – AakashM

+1

Ok, c'est mon erreur, mais Sql 2000 a des variables de table et j'utilise ce t-sql sur sql 2000. – teenup