2013-03-17 39 views
7

我正在学习Visual Studio 2012的“数据库项目”系统,使用带更新1的Visual Studio 2012和SSDT。在Visual Studio 2012中使用数据库项目和SQL数据工具:如何获取临时表来解决?

我发现它非常擅长在我的数据库中发现真正的问题,尤其是编程存储过程中的错误,其中有人从数据库表中删除了一个字段,但没有通过并验证所有存储过程都没有错误地执行。因此,通过Visual Studio 2012中的“build”命令验证您的.sql脚本非常方便。我讨厌放弃它。

但我还注意到,无论何时在存储过程中使用#TEMPTABLE,即使关闭了“启用对常用对象的扩展Transact-SQL验证”,仍然会出现“构建错误”,涉及#temptable.field引用在存储过程中。

数据库项目采取哪些步骤来确定临时表的模式?由于我的临时表根据定义并不存在于主模式中,因此在创建数据库之后,通过“导入数据库”选项将实际生产SQL数据库导入Visual Studio时,它们并未进入我的数据库项目。

我应该创建“#TEMPTABLE.SQL”文件并将它们添加到我的项目中吗?

错误示例:

c:\dev\...\dbo\Stored Procedures\xyz.sql(95,96): Warning: SQL71502: Procedure: [dbo].[proc123] has an unresolved reference to object [#temptable1].[somefield1]. 

如果有一种方法,包括定义在使用temptables一次的脚本,并将其包含到不同的地方,有必要了解这些,如果T-SQL这是很好的,如果扩展验证的转向做了我认为应该做的事情,那么也许没有必要。

Forum post suggests this isn't possible to fix and that all I can do is effectively turn off this warning at a file level, which is kind of horrible.

A question on this same subject but for Visual Studio 2010表明,这是一个领域,这项技术已经被完全破坏和微软已经知道了这件事多年,做过什么了。 VS2012.U1 + SSDT_Dec2012现在好了吗?

+0

您是否引用了在其会话范围内创建的临时表,然后在其他地方使用(在1个过程中创建,然后在另一个过程中使用)?或者这一切都在一个过程中? – Rich 2013-03-17 18:48:20

+0

这些临时表用作存储过程的几乎“不可见的输入”,在调用此存储过程之前创建,并且只能由调用的存储过程修改。事实上,这可能是一个非常讨厌的“模式嗅觉”,因为很难确切地说出这个存储过程作为前置状态存在的存在。我不喜欢它,但这是我必须在里面工作的。更糟糕的是,创建临时表的应用程序是现在为临时表定义模式的唯一地方。我正在寻找' - #pragma'或... – 2013-03-18 00:03:30

+0

我在微软的'social.msdn'网站上提出了同样的问题:http://social.msdn.microsoft.com/Forums/en-US/ ssdt /线程/ 12c0a590-4273-4861-8d00-a5804b0ea6cc – 2013-03-20 16:52:01

回答

3

这就是临时表的问题,你应该使用表值函数。

+0

这是正确的。微软可能无法安全地实现临时表系统。 – 2013-10-02 22:15:37

相关问题