Edit : doit être une procédure stockée, PAS une fonction Désolé !
J'ai une table :
TABLE: dbo.Numbers
Number_ID | Number
1 | 0
2 | 1
3 | 2
4 | 3
5 | 4
6 | 5
7 | 6
8 | 7
Je veux la sortie suivante ( comme une vue ) :
Number_ID | ModifiedNumber
1 | lol the num is 0
2 | lol the num is 1
3 | lol the num is 2
4 | lol the num is 3
5 | lol the num is 4
6 | lol the num is 5
7 | lol the num is 6
8 | lol the num is 7
J'ai une procédure stockée pour faire cela :
CREATE PROCEDURE dbo.UselessStoredProc @inputNum int
AS
SELECT 'lol my number is: ' + CONVERT(varchar(max), @inputNum)
GO
--TEST
EXEC dbo.UselessStoredProc @inputNum=2;
Mon objectif final est de remplir le ModifiedNumber
col via une procédure stockée, par exemple :
SELECT Number_ID, EXEC UselessStoredProc @inputNum = Number_ID as ModifiedNumber
FROM [TestDb].[dbo].[Numbers]
De toute évidence, cela ne fonctionne pas. Comment puis-je accomplir ceci.
P.S. S'il te plaît, ne me dis pas "fais-le" :
SELECT Number_ID, 'lol my number is: ' + CONVERT(varchar(max), Number_ID) as ModifiedNumber
FROM [TestDb].[dbo].[Numbers]
"
Je sais très bien que je peux le faire - il s'agit bien évidemment d'un exemple, le vrai code est beaucoup plus compliqué et nécessite une PROCÉDURE STOCKÉE . Notez que j'ai intentionnellement renvoyé une chaîne de caractères à partir de l'exemple de procédure stockée - j'ai besoin de valeurs complexes, pas seulement de int
.
Edit :
SQL Server 2012
Les fonctions ne sont PAS une option. Je m'excuse pour la confusion. Ma "fonction" doit appeler des procédures stockées intégrées, et les fonctions ne peuvent pas le faire.
Edit 2 : La raison pour laquelle j'ai besoin d'un SP, plutôt que d'une fonction, est que j'ai besoin de trouver dynamiquement la clé primaire d'une table, et donc d'utiliser du SQL dynamique. Je pensais que c'était trop d'informations, mais il semble que ce soit nécessaire :
DECLARE @sql nvarchar(max) = 'SELECT @Data_Table_Key = COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + ''.'' + QUOTENAME(CONSTRAINT_NAME)), ''IsPrimaryKey'') = 1 AND TABLE_NAME = ''' + @Data_Table_Name + ''''
EXECUTE sp_executesql @sql, N'@Data_Table_Key varchar(200) OUTPUT', @Data_Table_Key OUTPUT
Edit : En fin de compte, j'essayais de faire quelque chose qui ne peut être fait avec openrowset ce qui est un sale, sale hack. J'ai fini par écrire une procédure stockée qui écrit dans une table toutes les 5 minutes, et le logiciel tiers utilise cette table. J'apprécie toute l'aide apportée. J'ai accepté la réponse qui m'a le plus aidé, mais la réponse de la boucle while a également été utile et m'a permis d'obtenir ce dont j'ai besoin, mais avec des performances inacceptables.