Skip to content
Tiantan
Articles

' CONCAT ' ei ole tunnistettu sisäänrakennettu funktion nimi

On helmikuu 17, 2021 by admin

Asiakas ilmoitti käyttävänsä SQL Server 2012: ta, ja toimitimme testikyselyjä testattavaksi ennen lopullista toimitusta:

” CONCAT ”ei ole tunnistettu sisäänrakennettu funktion nimi.

Ymmärrän, että CONCAT() on uusi sisäänrakennettu -In SQL Server 2012: ssa käyttöön otettu toiminto, joka on hieno ja hyvä, mutta minua on pyydetty palauttamaan muutokseni, jotta tämä 2008R2 olisi yhteensopiva varjolla ”kyselyn suorittavalla käyttäjällä ei ehkä ole Transact-SQL-oikeuksia suorittaa ” Joten todistan vain, että asiakkaalla on todennäköisesti erillinen versio SQL Serveristä DEV: ään kuin heillä PROD: ssä.

En löydä tietoja käyttöoikeudet sisäänrakennetuille skalaariarvoisille funktioille, mutta onko se mahdollista, ja jos saa käyttäjä silti saman virhetekstin?

Kommentit

  • Jos concat ei toimi, kokeile tätä SELECT (c.FirstName+','+c.LastName) AS FULLNAME FROM graduatejob c;
  • CONCAT tukee desimaalityyppistä concat-tunnusta (ID + ' _ ' + OtherID), tunnus voi olla int-tyyppi.
  • Käytä vanhemmissa versioissa tätä: DECLARE @msg VARCHAR(200) = 'Shrink file completed. Target Size: ' + @TargetSize + ' MB. Timestamp: ' + CURRENT_TIMESTAMP;

vastaus

CONCAT otettiin käyttöön SQL Server 2012: ssa; ei ole mitään tapaa saada sitä toimimaan SQL Server 2008 R2: ssa. -oppaasta :

kirjoita kuvakuvaus tähän

Ei myöskään ole mahdollista estää sitä epäonnistumasta vuosina 2012+ edes yhteensopivuustasolla. Joten pyydä ihmisiä tarkistamaan SELECT @@VERSION; molemmissa palvelimissa; huomaat, että missä CONCAT epäonnistuu, se on < 11. Jotta koodisi olisi yhteensopiva aiempien versioiden kanssa, sinun on käyttää tavallista merkkijonon ketjuoperaattoria (+). En tiedä, miten tekisit tämän skalaarifunktiolla, ellet ole aina käyttänyt tarkka samaa määrää syötemerkkijonoja ja vaihdat koodisi käyttämään dbo.CONCAT() -merkkiä CONCAT() -kohdan sijaan (on tilanteita, joissa sillä on merkitystä, plus jos toiminto tekee mitä tahansa alkuperäistä, et tee, haluat yhdenmukaista käyttäytymistä päivittäessäsi /. Joten en suosittele tätä lähestymistapaa. Saatat myös joutua lisäämään NULL -käsittelyn ja muita pieniä muutoksia (mahdotonta kertoa, kuinka nykyistä komentosarjaa muutetaan tarkalleen, jos voimme ”t katso se).

Kommentit

  • Kiitos, Aaron. Koodia on triviaali muuttaa, koska CONCAT (): ta käytetään vain joidenkin merkkijonojen liittämiseen yhteen ennen SP_ExecuteSQL-dynaamista SQL-kutsua. Halusin vain vahvistaa, ettei ole mitään tapaa kieltää pääsyä CONCAT (): n käyttämiseen SQL Server 2012: ssa.
  • @beeks En tiedä mitään ' tapa kieltää käyttäjiltä mahdollisuus käyttää CONCAT(), ei. En ' seuraa varsin hyvin, mikä vaikuttaa siihen, mitä sinun on tehtävä, jotta koodi toimisi 2008 R2: lla. Sinun täytyy poistaa CONCAT(), ei lisätä sitä.
  • kyllä, ymmärrän kuinka koodista tehdään yhteensopiva 2008 R2: n kanssa, että on triviaali. Kiitos vahvistuksestasi, että tätä toimintoa DENY ei voi käyttää.
  • Huomaa vain, kun vaihdat konsatin + sinä ' ll on varmistettava, että ketjutettavat arvot ovat merkkijonoja, jos sinulla on numeerisia kenttiä, se yrittää lisätä ne (ja epäonnistuu, koska merkkijono ei ole int), joten jos on numerokenttä (tyyppi) tee muista muuntaa / välittää se ensin merkkijonoksi

Vastaa

Voit käyttää ODBC CONCAT -funktiota näin :

 SELECT {fn CONCAT("foo ", "test") }  

Tässä on ongelma, että tämä toiminto sallii vain kaksi parametria kerrallaan. Joten ellet halua käyttää useampaa kuin kahta tällaista:

 SELECT {fn CONCAT("foo ", {fn CONCAT("test ", "buddy")}) }  

Saatat ehkä ja käytä vain ”+” -operaattoria.

Written by admin

Vastaa Peruuta vastaus

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Viimeisimmät artikkelit

  • Balunin käyttäminen resonanssidipolin kanssa
  • Mitä eroa on “ ei voi ” ja “ ei voi ”? [kaksoiskappale]
  • JFK: ssä voitko liikkua terminaalien lentokentän välillä kotimaan lennoilla?
  • “ Syvästi arvostettu ” tai “ arvostettu rakkaasti / div>
  • Mitä ' abstraktit ideat ' tarkoittaa? [suljettu]

Arkistot

  • helmikuu 2021
  • tammikuu 2021
  • joulukuu 2020
  • marraskuu 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top