Lorsque je tente de créer cette table, il y a une erreur en disant que fns_GetSomeDate ne reconnaît pas:TSQL valeur de la colonne par défaut dans le tableau temporaire
create table #tmpTable(
id INT,
validity datetime NOT NULL default (dbo.fns_GetSomeDate())
)
et l'erreur: « Colonne « dbo »n'est pas autorisé dans ce contexte, et la fonction définie par l'utilisateur ou l'agrégat "dbo.fns_GetSomeDate" n'a pas pu être trouvée. " est retourné.
Mais lorsque je tente de créer la même table, mais pas comme une table temporaire (sans le « # ») tout fonctionne OK:
create table tmpTable(
id INT,
validity datetime NOT NULL default (dbo.fns_GetSomeDate())
)
Fonction existe. Est-ce que quelqu'un sait comment résoudre ce problème?
Lorsque vous créez une table temporaire, il est stocké dans 'tempdb'. Je suppose que c'est parce que votre fonction n'existe pas dans cette base de données? – Bridge
C'est intéressant. La fonction est manquante dans 'tempdb'. Vous devez le créer d'abord là. Mais lorsque les objets 'tempdb' sont clairs en raison d'un redémarrage ou d'autre chose, vous allez utiliser la fonction. De plus, j'ai essayé d'utiliser 'database.schema.function_name' dans la contrainte' default', mais ce n'est pas autorisé. – gotqn
C'est ce que je soupçonnais au début, que le problème est lié à la portée. J'ai essayé 'some_db.dbo.fns_GetSomeDate' et cela ne fonctionnait pas non plus, Erreur: Le nom" some_db "n'est pas autorisé dans ce contexte. Les expressions valides sont des constantes, des expressions constantes et (dans certains contextes) des variables. Les noms de colonne ne sont pas autorisés. J'ai essayé de stocker la valeur de fuction dans une variable locale, mais '' Les variables ne sont pas autorisées dans l'instruction CREATE TABLE. " – user3246112