日期:2014-05-17  浏览次数:20917 次

有个字符超过varchar(4000),该如何处理。
比如我有个存储过程
create procedure pageQuery(
   @ExeSQL varchar(4000)  --传递过来的SQL语句,然后执行。这个只是举例
) as 
begin
     exec @ExeSQL
end

但是现在可能我传递的参数@ExeSQL,会超过该值,就会自动被截取了字符。执行肯定会出错。
所以我打算用 @ExeSQL ntext
但是后面 exec @ExeSQL 就出问题, EXECUTE <procname> 中,procname 只能是类型为 char、varchar、nchar 或 nvarchar 的文字或变量。
我应该怎么转换下。

我知道可能大家会说,SQL语句怎么会有那么长,这么长在性能上也有影响。这个我知道,但是我现在是必须要这么做,先不考虑性能问题。大家有什么办法啊!谢谢
ntext nvarchar(max) exec

------解决方案--------------------
引用:
比如某表是保存所有用户ID的,然后属于某个机构。
查询时候,可以选择机构,然后再选择机构下的某个用户。
如果用户选择基本全部用户。那么语句是这么写
select * from table where CustomeID in (选中的ID)  --这里ID很多,然后就会越界
大家有没有特别好的方法处理啊!

因为这个原因,所以SQL 语句就会超过4000,甚至更大


改成varchar(8000)试试呢,会报错吗
------解决方案--------------------
引用:
你的意思是,我选择ID时,首先插入在一个临时表。
然后在 join 表。这个插入也很花时间啊!


如果是sql server 2005及以后的版本,可以改成:

varchar(max) 这个最多支持2G个字节,肯定能满足你的要求的
------解决方案--------------------


create procedure pageQuery(
   @ExeSQL Nvarchar(max)  --传递过来的SQL语句,然后执行。这个只是举例
) as 
begin
     exec @ExeSQL
end

------解决方案--------------------
varchar(max) 或者text类型