webForumDet fria alternativet

Problem med dynamisk SQL

8 svar · 324 visningar · startad av Glitter

GlitterMedlem sedan juli 2003442 inlägg
#1

Jag byger en SQL sats i SP och får problem med att strängen överstiger 4000 tecken som är max för Nvarchar. byter jag till Varchar som har 8000 tecken så får jag felmedelandet "[Microsoft][ODBC SQL Server Driver][SQL Server]Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'."

Hur skall jag göra?

Kör SQL 2000 Server

hakan@4u2.seMedlem sedan aug. 2000334 inlägg
#2

Vet inte om det här är lösningen..

SET TEXTSIZE 64512

LarsGMedlem sedan dec. 200012 465 inlägg
#3

Nej, det har ingen relevans i detta sammanhang.

Visa lite kod.

Du behöver ju inte använda en procedur.

tohaMedlem sedan dec. 1999698 inlägg
#4

Hmm...

http://dotnetjunkies.com/WebLog/richard.dudley/archive/2004/09/29/27169.aspx

If the string is greater than 4,000 characters, concatenate multiple local variables to use for the EXECUTE string.

GlitterMedlem sedan juli 2003442 inlägg
#5

LarsG skrev:

Nej, det har ingen relevans i detta sammanhang.

Visa lite kod.

Du behöver ju inte använda en procedur.

Jag behöver inte använda en procedur men jag tänkte att det skulle vara bäst eftersom det är en sökning som skall göras dynamisk... och snabbare

toha:
Verkar vara något som jag kan använda men jag fattar inte hur man skall göra.
Skall man dela upp strängen i flera delar och execute dem sedan (@str + @str2)? har nämligen testat detta och den klagade på "+"...

vad innebär N' och hur skall man använda den på variablar?

tohaMedlem sedan dec. 1999698 inlägg
#6

Jag vet inte om det är lösningen men för att typa unicode-text så måste man ange ett 'N' framför texten. Ex.

DECLARE @sql nvarchar(4000)
SET @sql = N'Min unicode-sträng'

GlitterMedlem sedan juli 2003442 inlägg
#7

Okey då e det nog inte lösningen då...
men han hade ju haft liknande problem... men jag fattar inte hur han löste det...

tohaMedlem sedan dec. 1999698 inlägg
#8

Måste du skapa ett sql-uttryck som är större än 4000 tecken? Kan du inte kapa upp det i smådelar?

tohaMedlem sedan dec. 1999698 inlägg
#9

Hittade lite i dokumentationen:

Using EXECUTE with a Character String
Use the string concatenation operator (+) to create large strings for dynamic execution. Each string expression can be a mixture of Unicode and non-Unicode data types.

Although each [N] 'tsql_string' or @string_variable must be less than 8,000 bytes, the concatenation is performed logically in the SQL Server parser and never materializes in memory. For example, this statement never produces the expected 16,000 concatenated character string:

EXEC('name_of_8000_char_string' + 'another_name_of_8000_char_string')

123 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
121 ms — hämta tråd, inlägg och bilagor (db)