SQL,表名为参数,查询长度超过4000个字符

时间:2009-11-24 16:24:21

标签: sql sql-server stored-procedures

我正在尝试编写一个以表名作为参数的存储过程。是的我已经知道这是一个安全漏洞,但这是一个内部存储过程,不会面临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个字符的cmd变量中使用@tableName(nvarchar的最大值)?

4 个答案:

答案 0 :(得分:8)

如果您使用SQL Server> = 2005,请尝试将nvarchar(4000)替换为nvarchar(MAX)

答案 1 :(得分:3)

DECLARE @cmd NVARCHAR(MAX);

答案 2 :(得分:2)

将一些逻辑提取到视图或用户定义的函数中。

答案 3 :(得分:0)

使用

DECLARE @cmd VARCHAR(8000)

而不是DECLARE @cmd NVARCHAR(MAX);

NVARCHAR(MAX) ALLOWS ONLY 4000 CHARACTERS.