2016-03-21 30 views
1

Я генерируемой в среде SQL Server Management Studio, 2014 это автоматический скрипт обновления (после редактирования визуальной таблицы):SQL Server 2005 - Неправильный синтаксис около ключевого слова «SET»

BEGIN TRANSACTION 

SET QUOTED_IDENTIFIER ON 
SET ARITHABORT ON 
SET NUMERIC_ROUNDABORT OFF 
SET CONCAT_NULL_YIELDS_NULL ON 
SET ANSI_NULLS ON 
SET ANSI_PADDING ON 
SET ANSI_WARNINGS ON 

COMMIT 

BEGIN TRANSACTION 
GO 

ALTER TABLE dbo.Rilevamenti ADD 
    DataScadenza datetime NULL 
GO 

DECLARE @v sql_variant 
SET @v = N'Data di scadenza rilevata.' 

EXECUTE sp_addextendedproperty N'MS_Description', @v, N'SCHEMA', N'dbo', N'TABLE', N'Rilevamenti', N'COLUMN', N'DataScadenza' 
GO 

ALTER TABLE dbo.Rilevamenti SET (LOCK_ESCALATION = TABLE) 
GO 

COMMIT 

SELECT 
    Has_Perms_By_Name(N'dbo.Rilevamenti', 'Object', 'ALTER') as ALT_Per, 
    Has_Perms_By_Name(N'dbo.Rilevamenti', 'Object', 'VIEW DEFINITION') as View_def_Per, 
    Has_Perms_By_Name(N'dbo.Rilevamenti', 'Object', 'CONTROL') as Contr_Per 

Теперь я хочу, чтобы запустить сценарий на другом базы данных, запущенной на экземпляре SQL Server 2005, но когда я запускаю его, я получаю ошибку:

Incorrect syntax near the keyword 'SET'

Где ошибка синтаксиса?

+1

Я считаю, что «SET NUMERIC_ROUNDABORT OFF» и «SET CONCAT_NULL_YIELDS_NULL ON» не существует на SQL Server 2005 – AXMIM

+0

Некоторые из этих команд не существуют, это другая версия – Hogan

ответ

3

Это то, что происходит, когда вы создаете скрипт в более поздней версии SSMS (SQL Server Management Studio), тогда вы настраиваете таргетинг на скрипт.

Comment by @axmim
I believe that SET NUMERIC_ROUNDABORT OFF and SET CONCAT_NULL_YIELDS_NULL ON doesn't exists on SQL Server 2005

абсолютно прав SET NUMERIC_ROUNDABORT не был введен до SQL Server 2008.


Update: Была неправильно SET SET NUMERIC_ROUNDABORT доступна в SQL Server 2005 (даже несмотря на то, first link говорит, что это применяется к SQL Server (начиная с 2008 года)) похоже, что SET (LOCK_ESCALATION = TABLE) является причиной, по которой это не было введено until SQL Server 2008.


Если вы собираетесь создавать сценарии с помощью задачи встроенных в Generate Scripts в SSMS всегда помнить, чтобы установить Script for Server Version в диалоговом окне Advanced Scripting Options к правильной версии SQL Server вы хотите, чтобы предназначаться со сценарием.

Advanced Scripting Options

Таким образом, сценарий будет генерироваться подходит для версии SQL Server мишенью.

+0

О, интересно. Но, несмотря на то, что я следил за вашим советом (установлен вариант «Сценарий для версии сервера» на SQL Server 2005), проблема остается. Конечно, я сгенерировал скрипт с нуля. Действительно, команда SET NUMERIC_ROUNDABORT снова появляется в скрипте. И да, @AXMIM, вы правы, этот SET не существует для SQL Server 2005. – jacktric

+0

@jacktric Это странно, что это обычно работает для меня, добавило ли оно 'SET NUMERIC_ROUNDABORT'? – Lankymart

+0

Возможно, это важно: в параметрах базы данных я вижу, как уровень совместимости базы данных SQL Server 2008 (100). И я не могу установить это значение на SQL Server 2005 (90). – jacktric

Смежные вопросы