在动态SQL中添加撇号

时间:2018-08-17 05:29:56

标签: sql sql-server sql-server-2012 dynamic-sql

我想问一下如何在动态SQL中添加撇号。我需要在其中必须带有撇号的一列中返回一条SQL语句。

我有以下声明:

SET @SQL_String = N'INSERT INTO #ReturnTable
    (
    TableName,
    ColName,
    SQL_Statement,
    Value
     )
VALUES
    (
    ''' + @TableName + ''',
    ''' + @ColName + ''',
    ''' +
         'SELECT ' + 
             @ColName +
         ' FROM ' +
             @TableSchema + '.' + @TableName +
         ' WHERE ' + 
             @ColName + ' = ' + CAST(@GuidArgument AS NVARCHAR(50)) + ';' +''',
        (
        SELECT
            ' + @ColName + '
        FROM
            ' + @TableSchema + '.' + @TableName +
       ' WHERE '
            + @ColName + ' = ''' + CAST(@GuidArgument AS NVARCHAR(50)) + 
       '''))';

执行:

EXECUTE @RC = [dbo].[GetLocationOfGuidPre] 'F2CAB996-F00F-43B8-A67A-0000721A829D'

我需要将整个第一个CAST放到一对'。

我尝试过:

  • 将整个CAST语句放入一个分隔的变量中,例如:DECLARE @Test NVARCHAR(50);
    • SET @Test = CAST(@GuidArgument AS NVARCHAR(50));
    • SET @Test = 'CAST(@GuidArgument AS NVARCHAR(50))';
    • SET @Test = '''CAST(@GuidArgument AS NVARCHAR(50))''';
  • 再加上两个撇号:
    • ' WHERE ' + @ColName + ' = ''' + CAST(@GuidArgument AS NVARCHAR(50)) + ''';'

1 个答案:

答案 0 :(得分:1)

请使用CHAR(39)而不是在动态代码中直接输入'。 示例:

declare @my_dynamic_sql nvarchar(max) = 'print char(39);';
exec(@my_dynamic_sql);