【发布时间】:2013-10-19 13:11:39
【问题描述】:
我想在 SQL Server 存储过程中生成一个 select 语句。我在 SQL 参数中有列名。
我正在尝试使用选定的列名以编程方式生成 select 语句,但似乎无法在存储过程中找到正确的语法。
CREATE PROCEDURE dbo.aProc
@testCondition int,
@colCount int,
@column_1 varchar(100) = null,
....
@column_40 varchar(100) null
AS
DECLARE @qry nvarchar(3000)
DECLARE @Iterator int
SET @testtype = 2
SET @Iterator = 0
SET @qry ='SELECT '
WHILE (@Iterator < @colCount-1)
BEGIN
SET @qry = @qry + ''+@column_''+CAST(@Iterator as varchar(2))+',''
Set @Iterator = @Iterator + 1
END
SET @qry = @qry + ''@column_+CAST(@colCount as varchar(2)) FROM aTable where aCol = @testCondition
【问题讨论】:
-
为什么需要 + '' + 部分?您在冒号后也有 2 个引号而不是 1 个引号。你能解释一下你想在你的过程中实现什么吗?
-
我想根据想要查看的列生成一个 SELECT stmnt,所以对我来说最简单的方法是在 sql para 中传递列名,并根据它们在存储中动态生成 sql select stmnt过程。
-
好吧,我想说改变你的 proc 签名更容易,如果你真的确定要执行此任务,你可以传递像'column1,column2,column3'之类的字符串
-
它已经有了这个签名,我正在尝试通过循环以最小的努力、代码行来“构建”查询字符串
-
堆栈溢出语法高亮显示已经向您显示错误:字符串文字。 SQL Server 也会通过它的消息告诉你。
标签: sql stored-procedures sql-server-2008-r2