第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

SQL NVARCHAR和VARCHAR限制

SQL NVARCHAR和VARCHAR限制

江戶川亂折騰 2019-08-06 16:55:28
SQL NVARCHAR和VARCHAR限制總之,我有一個(gè)很大的(不可避免的)動(dòng)態(tài)SQL查詢。由于選擇標(biāo)準(zhǔn)中的字段數(shù),包含動(dòng)態(tài)SQL的字符串增長超過4000個(gè)字符?,F(xiàn)在,我知道有一個(gè)4000最大值設(shè)置NVARCHAR(MAX),但查看Server Profiler中執(zhí)行的SQL語句DELARE @SQL NVARCHAR(MAX);SET @SQL = 'SomeMassiveString > 4000 chars...';EXEC(@SQL);GO似乎工作(???),對于另一個(gè)同樣大的查詢,它會拋出一個(gè)與此4000限制(!?)相關(guān)的錯(cuò)誤,它基本上修剪了這個(gè)4000限制之后的所有SQL并且給我留下了語法錯(cuò)誤。盡管這樣的探查,它表示在這個(gè)動(dòng)態(tài)的SQL查詢?nèi)ǎ。浚?。究竟發(fā)生了什么,我應(yīng)該將這個(gè)@SQL變量轉(zhuǎn)換為VARCHAR并繼續(xù)使用它嗎?謝謝你的時(shí)間。PS。能夠打印超過4000個(gè)字符來查看這些大查詢也是很好的。以下限制為4000SELECT CONVERT(XML, @SQL);PRINT(@SQL);還有其他很酷的方式嗎?
查看完整描述

3 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

好的,所以如果以后的問題是你有一個(gè)大于允許大小的查詢(如果它繼續(xù)增長可能會發(fā)生),你將不得不將其分成塊并執(zhí)行字符串值。所以,假設(shè)你有一個(gè)如下存儲過程:

CREATE PROCEDURE ExecuteMyHugeQuery    @SQL VARCHAR(MAX) -- 2GB size limit as stated by Martin SmithASBEGIN
    -- Now, if the length is greater than some arbitrary value
    -- Let's say 2000 for this example
    -- Let's chunk it
    -- Let's also assume we won't allow anything larger than 8000 total
    DECLARE @len INT    SELECT @len = LEN(@SQL)

    IF (@len > 8000)
    BEGIN
        RAISERROR ('The query cannot be larger than 8000 characters total.',
                   16,
                   1);
    END

    -- Let's declare our possible chunks
    DECLARE @Chunk1 VARCHAR(2000),
            @Chunk2 VARCHAR(2000),
            @Chunk3 VARCHAR(2000),
            @Chunk4 VARCHAR(2000)

    SELECT @Chunk1 = '',
           @Chunk2 = '',
           @Chunk3 = '',
           @Chunk4 = ''

    IF (@len > 2000)
    BEGIN
        -- Let's set the right chunks
        -- We already know we need two chunks so let's set the first
        SELECT @Chunk1 = SUBSTRING(@SQL, 1, 2000)

        -- Let's see if we need three chunks
        IF (@len > 4000)
        BEGIN
            SELECT @Chunk2 = SUBSTRING(@SQL, 2001, 2000)

            -- Let's see if we need four chunks
            IF (@len > 6000)
            BEGIN
                SELECT @Chunk3 = SUBSTRING(@SQL, 4001, 2000)
                SELECT @Chunk4 = SUBSTRING(@SQL, 6001, (@len - 6001))
            END
              ELSE
            BEGIN
                SELECT @Chunk3 = SUBSTRING(@SQL, 4001, (@len - 4001))
            END
        END
          ELSE
        BEGIN
            SELECT @Chunk2 = SUBSTRING(@SQL, 2001, (@len - 2001))
        END
    END

    -- Alright, now that we've broken it down, let's execute it
    EXEC (@Chunk1 + @Chunk2 + @Chunk3 + @Chunk4)END


查看完整回答
反對 回復(fù) 2019-08-06
?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

你也可以使用nvarchar文本。這意味著你必須在你的大量字符串之前只有一個(gè)“N”,就是這樣!沒有限制了

DELARE @SQL NVARCHAR(MAX);SET @SQL = N'SomeMassiveString > 4000 chars...';EXEC(@SQL);GO


查看完整回答
反對 回復(fù) 2019-08-06
  • 3 回答
  • 0 關(guān)注
  • 1066 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號