2015-12-21 50 views
-1

我有一个MSSQL脚本这是行不通的:?使用MSSQL脚本?'在串

IF object_id('amClearString') IS NULL 
    exec('CREATE FUNCTION [dbo].[amClearString](@Text ntext) 
RETURNS NVARCHAR(4000) 
WITH EXECUTE AS CALLER 
AS 
BEGIN 
    DECLARE @sClearText NVARCHAR(4000) 
    SET @sClearText = (SELECT REPLACE(CONVERT(nvarchar(4000), @Text), '''', '?''') 
        ) 
    RETURN(@sClearText); 
END 
') 

的问题是,它不会承认”作为有效的语法。

第一个''''按照它的假设通过简单地使用两个撇号而不是一个。但它不会与问号结合使用。 有没有人知道这个解决方案?

+2

尝试使用',''?''') – lad2025

+0

您也应该停止使用(n)文本。自SQL 2005以来,它已被弃用(n)varchar(max)。我真正不明白的是你为什么要用动态sql创建一个函数? –

+0

你也没有取代任何东西。这个''''变成'' - 空字符串。 –

回答

1
IF OBJECT_ID('amClearString') IS NULL 
    EXEC(' 
    CREATE FUNCTION dbo.amClearString(@Text NVARCHAR(MAX)) 
    RETURNS NVARCHAR(4000) 
    WITH EXECUTE AS CALLER 
    AS 
    BEGIN 

     RETURN REPLACE(@Text, '''', ''?'') 

    END') 
+0

结果是 – ambicon

+0

如果我用你的建议结果是 'SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [DBO]。[ amClearString](@文本NTEXT) RETURNS NVARCHAR(4000) WITH EXECUTE AS CALLER AS BEGIN DECLARE @sClearText NVARCHAR(4000) SET @sClearText =(SELECT REPLACE(CONVERT(nvarchar的(4000),@Text) ,'','?') ) RETURN(@sClearText); END' 问题是我不想''和'?'结果。 相反,我需要''''和''?''作为结果,但只要向脚本添加更多撇号,就会导致错误 – ambicon