在动态 SQL 中添加撇号
Adding an apostrophe into a dynamic SQL
我想问一下如何在动态中添加撇号SQL。我需要在其中一列中 return 一个 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)) + ''';'
请使用 CHAR(39) 而不是直接在动态代码中键入 '。
示例:
declare @my_dynamic_sql nvarchar(max) = 'print char(39);';
exec(@my_dynamic_sql);
我想问一下如何在动态中添加撇号SQL。我需要在其中一列中 return 一个 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)) + ''';'
请使用 CHAR(39) 而不是直接在动态代码中键入 '。 示例:
declare @my_dynamic_sql nvarchar(max) = 'print char(39);';
exec(@my_dynamic_sql);