Tsql 如何告诉SQL Server不要在[sub]过程中警告临时表的使用情况?
我拥有的是一个存储过程(a),它创建一个临时表(T)并调用另一个过程(B)B插入到T,但由于它是在A中创建的,因此生成警告我T在B中未知。如果代码对您更有意义,那么它就是:Tsql 如何告诉SQL Server不要在[sub]过程中警告临时表的使用情况?,tsql,sql-server-2012,Tsql,Sql Server 2012,我拥有的是一个存储过程(a),它创建一个临时表(T)并调用另一个过程(B)B插入到T,但由于它是在A中创建的,因此生成警告我T在B中未知。如果代码对您更有意义,那么它就是: BEGIN TRAN GO CREATE PROCEDURE dbo.B AS BEGIN INSERT INTO #T VALUES (1) INSERT INTO #T VALUES (0) INSERT INTO #T VALUES (1) END GO CREATE PROCEDURE db
BEGIN TRAN
GO
CREATE PROCEDURE dbo.B
AS
BEGIN
INSERT INTO #T VALUES (1)
INSERT INTO #T VALUES (0)
INSERT INTO #T VALUES (1)
END
GO
CREATE PROCEDURE dbo.A
AS
BEGIN
CREATE TABLE #T
(
Dummy BIT
)
EXEC dbo.B
SELECT * from #T
END
GO
EXEC dbo.A
ROLLBACK
有没有一种方法可以让VisualStudio不向我发出警告?我希望有像ReSharper这样的评论可以告诉它忽略这个问题
我知道另一种选择是添加
,如果不存在,则创建T
脚本,但如果可能的话,我希望避免这种情况。尝试在以下内容中进行转换
IF 1 = 0
CREATE TABLE #T (Dummy BIT)
我建议更改程序B以返回记录。然后使用
EXEC。。。像这样插入
语句:
BEGIN TRAN
GO
CREATE PROCEDURE dbo.B
AS
BEGIN
Select 1
Union All Select 0
Union All Select 1
END
GO
CREATE PROCEDURE dbo.A
AS
BEGIN
CREATE TABLE #T
(
Dummy BIT
)
EXEC dbo.B
INSERT #T
SELECT * from #T
END
GO
EXEC dbo.A
ROLLBACK
一些想法:
用实际代码替换对B的调用。换句话说,不是
exec dbo.B
使用B的实际代码:
INSERT INTO #T VALUES (1)
INSERT INTO #T VALUES (0)
INSERT INTO #T VALUES (1)
请注意,如果使用表值参数,则不会收到此警告,但由于这些参数必须声明为只读,因此我假设这不是在B中使用的选项。这不是SQL Server警告-这是Visual Studio警告。感谢@Damien_的反对者。我认为这实际上是SSDT警告。它在Management Studio中显示,在Visual Studio构建中显示警告。这将起作用,但我绝不同意仅为了避免编译器错误而将
IF 1=0
放入程序中。