3

MS Access 2010を使用して、SQLServer2012でパススルークエリを使用してストアドプロシージャを作成しようとしています。

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ステートメントを削除せずに機能させるにはどうすればよいですか?

どんな助けでも大歓迎です!

エドガラス

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

MSAccess2010でテスト済み

于 2012-08-30T14:09:22.223 に答える
1

GOはTSQLステートメントではなく、SSMSのコマンドです。MSAccessからクエリを実行する限り、を使用することはできませんGO

したがって、唯一のオプションは、クエリを分割して個別に実行することです。
編集済み実際には、唯一のオプションではありません。Remouの回答を参照してください。

また、これはMSAccessを介してプロシージャを作成するのは良い考えではないと思います。少なくともそれは便利ではありません。たぶん、MSAccessを介してプロシージャを作成することを余儀なくされた元の問題を解決する方法を尋ねたほうがいいでしょうか?

お役に立てれば。

于 2012-08-30T13:31:51.403 に答える