【发布时间】:2018-08-17 13:54:35
【问题描述】:
我想问一下如何在动态 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)) + ''';'
【问题讨论】:
-
您能strip your example down 减少字段以更好地说明问题的核心吗?
-
嗯,我希望现在更好。
-
您是说
@GuidArgument参数包含撇号吗?如果是这样,我认为您需要使用REPLACE执行类似' WHERE ' + @ColName + ' = ''' + REPLACE(CAST(@GuidArgument AS NVARCHAR(50)), '''', '''''') + ''';'的操作,将每个撇号替换为两个。 -
在
sp_executesql中使用参数传递常量值,再也不用担心单引号了。
标签: sql sql-server sql-server-2012 dynamic-sql