access-SQL传递查询(创建SP)错误

时间:2012-08-30 13:22:29

标签: sql-server ms-access access-vba pass-through

我正在尝试使用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] (.....)

在Access中我收到此错误:

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语句的情况下使其工作?

非常感谢任何帮助!

Edgaras

2 个答案:

答案 0 :(得分: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中测试

答案 1 :(得分:1)

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

因此,唯一的选择是拆分查询并单独执行。
已编辑 Actualy,不是唯一的选择,请参阅Remou的回答。

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

希望这会有所帮助。