sql >> Databasteknik >  >> RDS >> Sqlserver

Undvikande enstaka citat i SQL Server

Ett råd. När du testar ett dynamiskt skript ska du först bara visa det istället för att köra det. På så sätt kommer du att kunna se det exakt som det skulle ses av EXEC uttalande.

Nu till frågan. Du bör komma ihåg att du inte klarar variabeln till SplitValues men sätter istället ihop variabelns värde till skriptet. Eftersom värdet är varchar , bör den sättas samman med citattecken runt den. Frånvaron av dem är det enda problemet egentligen.

Citaten runt det andra argumentet, kommatecken, är korrekt escaped i båda fallen . Så använd bara någon av metoderna för att lägga till citattecken runt det första argumentet:

  • upprepning av citattecken:

    DECLARE @year varchar(max), @sql varchar(max);
    SET @year = '111,11';
    SET @sql = 'SELECT * FROM SplitValues(''' + @year + ''','','')';
    SELECT @sql;
    
  • med CHAR(39) :

    DECLARE @year varchar(max), @sql varchar(max);
    SET @year = '111,11';
    SET @sql = 'SELECT * FROM SplitValues(' + CHAR(39) + @year + CHAR(39) + ',' + CHAR(39) + ',' + CHAR(39) + ')';
    SELECT @sql;
    

Uppenbarligen är den första metoden mer kompakt, men, som jag sa, båda fungerar bra, vilket den här SQL Fiddle-demon tydligt visar.

Observera dock att du lätt kan komma undan denna fråga i första hand, om du ursäktar ordleken. Istället för EXEC () , kan du använda EXEC sp_executesql , som låter dig använda parametrar . Här är samma skript omskrivet för att använda sp_executesql :

DECLARE @year varchar(max), @delim char(1);
SET @year = '111,11';
SET @delim = ',';
EXEC sp_executesql
  N'SELECT * FROM SplitValues(@year_param,@delim_param)',
  N'@year_param varchar(max), @delim_param char(1)',
  @year,@delim;

Som du kan se behöver du inte oroa dig för att undvika citattecken:SQL Server tar sig an att ersätta värdena korrekt, inte du.



  1. SQL Server:Hur använder man UNION med två frågor som BÅDA har en WHERE-klausul?

  2. SQL UPPDATERING för nybörjare

  3. Ansluter SAS JMP till Salesforce.com

  4. Hur man använder frågedesignern i SQL Server