Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

OPENROWSET n'accepte pas les variables pour ses arguments (SQL Server)

Si vous essayez d'utiliser OPENROWSET pour exécuter une requête distribuée ad hoc dans SQL Server, mais vous obtenez toujours une erreur de "syntaxe incorrecte", et vous ne voyez rien de mal avec votre syntaxe, il se peut que vous essayiez d'utiliser une variable pour l'un des les arguments.

Comme mentionné dans le titre de cet article, OPENROWSET n'accepte pas les variables pour ses arguments.

Si vous utilisez des variables comme arguments, essayez de les remplacer par des littéraux de chaîne.

Exemple

Voici un exemple pour illustrer.

DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
    'SQLNCLI', 
    'Server=MyLinkedServer;Trusted_Connection=yes;', 
    @tsql);

Résultat :

Msg 102, Level 15, State 1, Line 16
Incorrect syntax near '@tsql'.

Si vous consultez la documentation de Microsoft, vous pouvez voir qu'elle indique explicitement que :

OPENROWSET n'accepte pas les variables pour ses arguments.

Donc, si nous modifions le code ci-dessus pour que tous les arguments soient des littéraux de chaîne, nous n'obtenons plus d'erreur.

SELECT * FROM OPENROWSET(
    'SQLNCLI', 
    'Server=MyLinkedServer;Trusted_Connection=yes;', 
    'SELECT * FROM Test.dbo.Cats');

Résultat :

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
| 6       | Sharp       |
| 7       | Fritz       |
| 8       | Garfield    |
| 9       | Boss        |
+---------+-------------+