3

我正在尝试使用 MS Access 2010 在 SQL Server 2012 中使用传递查询创建存储过程。

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'SCHtest') 
EXECUTE sp_executesql N'create schema SCHtest'
GO
CREATE PROCEDURE [SCHtest].[SQLLrtest_2]
AS
BEGIN
INSERT INTO [dbo].[UploadTest] (.....)

在访问我得到这个错误:

Run time error '3146':
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax nera 'GO'. (#102)
[Microsoft][ODBC SQL Server Driver][SQL Server]'CREATE/ALTER PROCEDURE' must be 
the first statement in a query batch. (#111)

如果我将代码复制粘贴到 SQL Server - 一切正常!

正如错误中所写,如果我删除 IF 语句和 GO,则可以在 Access 和 SQL 中使用。如何在不删除 IF 语句的情况下使其工作?

非常感谢任何帮助!

埃德加拉斯

4

2 回答 2

2

如何设置这样的东西:

IF NOT EXISTS (SELECT *
               FROM   sys.schemas
               WHERE  name = N'testx')
  EXECUTE Sp_executesql
    N'create schema testx'

DECLARE @sql VARCHAR(max)

SELECT @sql = '
CREATE PROCEDURE testx
AS
INSERT INTO [dbo].[table_1] (atext) values (''abc'') '

EXEC (@sql)
EXEC Testx 

参考:http ://ask.sqlservercentral.com/questions/4420/alternative-to-go-for-batching-sql-statements.html

在 MS Access 2010 中测试

于 2012-08-30T14:09:22.223 回答
1

GO不是 TSQL 语句,它是 SSMS 的命令。只要您从 MSAccess 执行查询,您就不能使用GO.

因此,您唯一的选择是拆分查询并分别执行它们。已编辑实际上,这不是唯一的选择,请参阅 Remou 的答案

另外,我认为通过 MSAccess 创建过程不是一个好主意。至少不方便。也许,你最好问一下,你原来的问题是如何解决迫使你通过MSAccess创建程序的?

希望这可以帮助。

于 2012-08-30T13:31:51.403 回答