Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Екраниране на единични кавички в SQL Server

Един съвет. Когато тествате динамичен скрипт, първо просто го покажете, вместо да го изпълнявате. По този начин ще можете да го видите точно както би се виждал от EXEC изявление.

Сега към въпроса. Трябва да имате предвид, че не предавате променливата към SplitValues но вместо това свързват стойността на променливата в скрипта. Тъй като стойността е varchar , трябва да бъде свързан с кавички около него. Липсата им е единственият проблем.

Кавичките около втория аргумент, запетаята, се екранират правилно и в двата случая . Така че, просто използвайте някой от методите, за да добавите кавички около първия аргумент:

  • повторение на кавичката:

    DECLARE @year varchar(max), @sql varchar(max);
    SET @year = '111,11';
    SET @sql = 'SELECT * FROM SplitValues(''' + @year + ''','','')';
    SELECT @sql;
    
  • използвайки 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;
    

Очевидно първият метод е по-компактен, но, както казах, и двата работят добре, както ясно показва тази демонстрация на SQL Fiddle.

Имайте предвид обаче, че можете лесно да избегнете този проблем на първо място, ако извините за каламбура. Вместо EXEC () , можете да използвате EXEC sp_executesql , което ви позволява да използвате параметри . Ето същия скрипт, пренаписан за използване на 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;

Както можете да видите, няма нужда да се притеснявате за избягване на кавичките:SQL Server се затруднява да замени стойностите правилно, а не вие.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо моята ODBC връзка се проваля при стартиране на SSIS натоварване във Visual Studio, но не и при изпълнение на същия пакет с помощта на Execute Package Utility

  2. Преобразувайте цяло число в шестнадесетично и шестнадесетично в цяло число

  3. 9 жизненоважни задачи, за които отговарят DBA

  4. Не може да се съкрати таблицата, защото се препраща от ограничение FOREIGN KEY?

  5. Как да използвате RANK() в SQL Server