2012-11-15 26 views
2

可能重複:
How do I escape a single quote in sqlserver?如何在sql命令中使用單引號?

我下面一個腳本的數據庫從this link放下一切。我在這條線上執行時會出錯。

SET @statement = ' 
IF(@type = 'F') or (@type = 'C') or (@type = 'D') or (@type='F') or (@type='K') 

原因是因爲單引號。我想知道我該如何解決這個錯誤?

/*** drop (pretty much) everything before rebuilding the database ***/ 
DECLARE 
    OBJECTS CURSOR FOR SELECT 
     so.name, 
     so.type, 
     so.type_desc, 
     p.name AS parentName 
    FROM 
     sys.objects AS so 
    LEFT JOIN sys.objects AS p ON so.parent_object_id = p.object_id 
    WHERE 
     so.schema_id = 1 
    ORDER BY 
     CASE 
    WHEN so.type = 'F' THEN 
     0 
    WHEN so.type = 'TR' THEN 
     1 
    WHEN so.type = 'U' THEN 
     2 
    WHEN so.type = 'F' THEN 
     3 
    ELSE 
     4 
    END OPEN OBJECTS DECLARE 
     @name AS nvarchar (MAX) DECLARE 
      @type AS nvarchar (2) DECLARE 
       @type_desc AS nvarchar DECLARE 
        @parentName AS nvarchar (MAX) DECLARE 
         @statement AS nvarchar (MAX) FETCH NEXT 
        FROM 
         OBJECTS INTO @name, 
         @type, 
         @type_desc, 
         @parentName 
        WHILE @@FETCH_STATUS = 0 
        BEGIN 

        SET @statement = ' IF(@type = ' F ') 
BEGIN 
PRINT ' DROPING FK : ' + @name + ' OF type ' + @type + ' (' + @type_desc + ') ' 
SET @statement = ' ALTER TABLE ' + @parentName + ' DROP CONSTRAINT ' + @name 
EXECUTE(@statement) 
END 
ELSE IF (@type = ' TR ') 
BEGIN 
PRINT ' DROPING TRIGGER : ' + @name + ' OF type ' + @type + ' (' + @type_desc + ') ' 
SET @statement = ' DROP TRIGGER ' + @name 
EXECUTE(@statement) 
END 
ELSE IF (@type = ' U ') 
BEGIN 
PRINT ' DROPING TABLE : ' + @name + ' OF type ' + @type + ' (' + @type_desc + ') ' 
SET @statement = ' DROP TABLE ' + @name 
EXECUTE(@statement) 
END 
ELSE IF (@type = ' FN ') 
BEGIN 
PRINT ' DROPING FUNCTION : ' + @name + ' OF type ' + @type + ' (' + @type_desc + ') ' 
SET @statement = ' DROP FUNCTION ' + @name 
EXECUTE(@statement) 
END 
ELSE 
PRINT ' Didn 't drop object ' + @name + ' of type ' + @type + ' (' + @type_desc + ')' FETCH NEXT 
        FROM 
         OBJECTS INTO @name, 
         @type, 
         @type_desc, 
         @parentName 
        END CLOSE OBJECTS DEALLOCATE OBJECTS 

回答

5
如果你想使用單引號一份聲明中,與其他單引號,例如逃吧

SET @statement = 'world''s view'; 
SET @statement2 = 'world''s view'; 

從你上面的例子

SET @statement = ' 
       IF(@type = ''F'') or (@type = ''C'') or 
        (@type = ''D'') or (@type=''F'') or 
        (@type=''K'')' 

-- the strings are all red. 
0

單引號用於在SQL中表示字符串文字。 如果您需要明確地插入一個單引號,你應該使用雙單引號(「」)

0

它應該是這樣的:

SET @statement = 'IF(@type = ''F'') or (@type = ''C'') or (@type = ''D'') or (@type=''F'') or (@type=''K'')' 

拉吉

相關問題