【发布时间】:2015-05-05 19:01:05
【问题描述】:
USE [WORKFILES]
GO
/****** Object: StoredProcedure [dbo].[MLINT] Script Date: 05/04/2015 16:49:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[MLINT]
AS
IF OBJECT_ID('WORKFILES.dbo.MLINT05', 'U') IS NULL
BEGIN
--CREATE CMPDTE TABLE
CREATE TABLE WORKFILES.dbo.MLINT05
(DTSTAMP DATETIME NOT NULL)
END
BEGIN
--INSERT TIMESTAMP
INSERT INTO WORKFILES.dbo.MLINT05
SELECT (getdate())
END
BEGIN
SELECT CONVERT(varchar(20), DTSTAMP)
FROM [WORKFILES].[dbo].[MLINT05]
END
我在我的 SP 中添加了一个 go
USE [WORKFILES]
GO
/****** Object: StoredProcedure [dbo].[MLINT] Script Date: 05/04/2015 16:49:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[MLINT]
AS
IF OBJECT_ID('WORKFILES.dbo.MLINT05') IS NULL
GO
BEGIN
--CREATE CMPDTE TABLE
CREATE TABLE WORKFILES.dbo.MLINT05
(DTSTAMP DATETIME NOT NULL)
END
BEGIN
--INSERT TIMESTAMP
INSERT INTO WORKFILES.dbo.MLINT05
SELECT (getdate())
END
BEGIN
SELECT CONVERT(varchar(20), DTSTAMP)
FROM [WORKFILES].[dbo].[MLINT05]
END
【问题讨论】:
-
您可能需要在帖子正文中澄清您的问题,并添加一些您尝试过的事情的示例以获得任何帮助。您可以随时更新您的问题。欢迎来到栈溢出,推荐阅读:stackoverflow.com/help/how-to-ask
-
运行
select OBJECT_ID('WORKFILES.dbo.MLINT05', 'U')会得到什么? -
当我选择 OBJECT_ID('WORKFILES.dbo.MLINT05', 'U') 我得到(无列名),结果为 289526398
-
我现在的问题是一旦我执行,表将被插入getdate。但是如果我再次运行,错误消息表明我的表已经在数据库中,并且 select 语句不会执行。
-
这是由sql引擎的工作方式造成的。它会解析您的过程,但是当它尝试执行它时,引擎足够聪明,可以意识到您的表已经存在。如果你想做这种事情,你需要把创建表的逻辑放在动态 sql 中。并且将 GO 放在一个过程中是行不通的。 GO 是默认的批处理分隔符,不是 t-sql 语句。
标签: sql sql-server if-statement stored-procedures