sql >> Database teknologi >  >> RDS >> Sqlserver

T-SQL:Kan ikke sende sammenkædet streng som argument til lagret procedure

EXECUTE-sætningen har simpelthen en anden grammatik end andre sætninger som SELECT og SET. Se f.eks. syntaksafsnittet øverst på de følgende to sider.

EXECUTE-sætning:http://msdn.microsoft.com/en-us/ library/ms188332.aspx

SET-erklæring:http://msdn.microsoft.com/en-us/ library/ms189484.aspx

Syntaksen for EXECUTE accepterer kun en værdi

Hvorimod syntaksen for SET accepterer et udtryk

En værdi er grundlæggende kun en hårdkodet konstant, men et udtryk vil blive evalueret. Det er som at have varchar 'SELECT 1 + 1'. Det er bare en varchar-værdi lige nu. Du kan dog evaluere strengen som denne:

EXEC('SELECT 1 + 1')

Jeg formoder, at alt, hvad jeg påpeger, er, at EXEC-kommandoen ikke tillader udtryk per definition, hvilket du tilsyneladende allerede har fundet ud af. Jeg ved ikke, hvad intentionen med udviklerne af T-SQL var, da de lavede det på den måde. Jeg formoder, at grammatikken bare ville komme over styr, hvis du fik lov til at smide underforespørgsler i underforespørgsler i parameterlisten for en lagret procedure.

T-SQL-udtryk:http://msdn.microsoft.com/en- us/library/ms190286.aspx



  1. Formatering af resultaterne af en MySQL-forespørgsel, som om den blev kørt fra konsollen

  2. Ret fejl "ORA-01789:forespørgselsblokken har forkert antal resultatkolonner"

  3. Hvordan henter man kategorier og underkategorier i en enkelt forespørgsel i sql? (mysql)

  4. Sådan løses Ingen forespørgsel i datareader-fejl?