Sql 游标和打印功能及游标存在问题

Sql 游标和打印功能及游标存在问题,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我只是在SQL 2008中使用游标,但我面临一些问题。 第一个是,每次执行查询时,我声明游标的那一行会给我一个错误。这表示具有此名称的游标已经存在。我想提供一种方法,如果光标存在,不要创建它,如果它还没有定义,sql就创建它。我声明我已经在代码末尾关闭并释放了游标,但问题仍然存在 declare c1 cursor fast_forward for select CustomerID, [Customer Name], [Product Name], Maximum from favorit

我只是在SQL 2008中使用游标,但我面临一些问题。 第一个是,每次执行查询时,我声明游标的那一行会给我一个错误。这表示具有此名称的游标已经存在。我想提供一种方法,如果光标存在,不要创建它,如果它还没有定义,sql就创建它。我声明我已经在代码末尾关闭并释放了游标,但问题仍然存在

declare c1 cursor fast_forward for select CustomerID, [Customer Name], [Product Name],  
Maximum from favorit;
open c1
fetch next from c1 into @custID, @custName, @prodName, @max;
while @@FETCH_STATUS = 0
begin
PRINT @CustID, @custName;
fetch next from c1 into @custID, @custName, @prodName, @max;
end
close c1
deallocate c1
关于sql中的打印函数,我还有一个问题,请看下面的一行

PRINT @CustID, @custName;
无效吗??SQL中的语法是什么?我们如何在SQL中打印多个变量?如果可能,请建议一种方法,将两个变量和它们之间的一些字符串连接起来,例如:

 print @custID + 'this is the customer name' + @custName + 'etc'
对于我打印的每一行,还有一个问题,我想打印行数,例如这样的问题:
1客户名称客户id
2客户名称客户id

光标结束。
您将如何在游标的while语句中实现和打印这些数字

您可以在顶部声明光标一次。然后在需要时打开它“打开”命令导致从数据库检索新数据

那么您的打印语法如下所示:

print 'my custI is %1!, custName is %2!', @custId, @custName

现在还不清楚你想做什么。为什么不运行查询一次获得所有结果,然后使用客户机代码格式化和显示数据

select CustomerID, [Customer Name], [Product Name], Maximum from favorit
如果需要,可以使用ROW_NUMBER()函数添加行号,或者在显示输出时在客户端应用程序中对行号进行编号

接下来,PRINT是一个语句,而不是一个函数。它只能打印一个字符串,因此您需要生成并打印该字符串。您的第二个示例可能实际可行,但您必须处理任何不同的数据类型:

print cast(@custID as varchar(10)) + 'this is the customer name' + cast(@custName as varchar(100)) + 'etc'  

最后,直接从TSQL格式化和打印数据通常表明您做错了什么。通常的方法是将结果集返回给客户端应用程序,让客户端应用程序格式化、打印、转换为PDF或其他格式。您的应用程序可以是一个小的Perl脚本、一个完整的报告解决方案,或者介于两者之间的任何东西,但打印并不是一个很好的数据显示机制。

sql server说,在打印行中,在“,”附近有不正确的语法,事实上:,@custIdi只想让我的代码点击一次即可运行,我在网上搜索类似的东西来创建一个视图。有一个名为object_id的函数,用于查看视图的对象是否已创建。我们用于查看它是否为null,然后删除视图并创建一个新视图。我不能对光标做同样的事情。你能提供一条路吗??非常感谢,在TSQL中,print不是这样工作的:它不直接支持变量插值。