我正在尝试编写一个以表名作为参数的存储过程。是的,我已经知道这是一个安全漏洞,但这是一个内部存储过程,不会面临SQL注入的典型风险。以表名作为参数和查询超过4000个字符的SQL
我有什么迄今是像下面这样:
CREATE PROCEDURE [dbo].[myprocedure]
@tableName sysname
AS
DECLARE @cmd nvarchar(4000)
SET @cmd = N' Select blah blah from ' + @tableName
EXEC (@cmd)
GO
查询将在理论工作,但我的问题是,我查询超过4000个字符长。是否有另一种方法来使用长度超过4000个字符(这是nvarchar的最大值)的cmd变量中的@tableName?
这没有奏效。我正在运行SQL Server 2005.问题是,MAX实际上是4000. – a432511 2009-11-24 16:32:18
@ a432511:这是不正确的。 varchar(MAX)的最大大小是2^31。 – 2009-11-24 16:35:11
嗯......我开始认为你对这个建议是正确的,它可能已经解决了我的主要问题,但我的查询中也有一个语法问题。谢谢您的帮助! – a432511 2009-11-24 16:36:17