Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Unikanie pojedynczego cudzysłowu w SQL Server

Mała rada. Podczas testowania skryptu dynamicznego najpierw po prostu wyświetl go zamiast wykonywać. W ten sposób będziesz mógł zobaczyć go dokładnie tak, jak widziałby go EXEC oświadczenie.

Przejdźmy teraz do sprawy. Pamiętaj, że nie przekazujesz zmiennej do SplitValues ale zamiast tego łączą wartość zmiennej w skrypcie. Ponieważ wartość to varchar , powinien być połączony ze znakami cudzysłowu. Ich brak jest tak naprawdę jedynym problemem.

Cudzysłowy wokół drugiego argumentu, przecinka, są poprawnie escapowane w obu przypadkach . Tak więc po prostu użyj jednej z metod, aby dodać cudzysłowy wokół pierwszego argumentu:

  • powtórzenie cudzysłowu:

    DECLARE @year varchar(max), @sql varchar(max);
    SET @year = '111,11';
    SET @sql = 'SELECT * FROM SplitValues(''' + @year + ''','','')';
    SELECT @sql;
    
  • używając 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;
    

Oczywiście pierwsza metoda jest bardziej kompaktowa, ale, jak powiedziałem, obie działają dobrze, co wyraźnie pokazuje to demo SQL Fiddle.

Pamiętaj jednak, że możesz łatwo uniknąć tego problemu, jeśli wybaczysz grę słów. Zamiast EXEC () , możesz użyć EXEC sp_executesql , który umożliwia korzystanie z parametrów . Oto ten sam skrypt przepisany, aby używał 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;

Jak widać, nie musisz się martwić o unikanie cudzysłowów:SQL Server zadaje sobie trud prawidłowego podstawiania wartości, a nie Ty.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przedstawiamy odtwarzanie — nowa diagnostyka punktu w czasie dla Spotlight Cloud

  2. SQL, jak łączyć wyniki?

  3. 2 sposoby na zwrócenie nazwy serwera w SQL Server (T-SQL)

  4. Jak dodać ograniczenie klucza obcego do istniejącej tabeli w SQL Server — samouczek SQL Server / TSQL część 68

  5. Jak zaktualizować wiersze o losową datę?