SQL Server ': setvar' Hatası


123

T-SQL'de aşağıdaki gibi bazı betik değişkenleri oluşturmaya çalışıyorum:

    /*
    Deployment script for MesProduction_Preloaded_KLM_MesSap
    */

    GO
    SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

    SET NUMERIC_ROUNDABORT OFF;


    GO
    :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

Ancak, bunu çalıştırdığımda, 'Yakınında yanlış sözdizimi': 'hatası alıyorum. Neyi yanlış yapıyorum?

Yanıtlar:


239

: Setvar yalnızca SQL komut modunda çalışır, bu nedenle muhtemelen yönetim stüdyosunda normal SQL yürütme içindesiniz ve komut moduna geçmediniz.

Bu, "Sorgu" menüsüne gidip "SQLCMD modu" seçilerek SQL Server Management Studio'daki kullanıcı arabirimi aracılığıyla yapılabilir.


19
Bu, Visual Studio'nun: Veri> Şema Karşılaştırma yardımcı programını kullanırken de bir sorundur. Ortaya çıkan değişiklik komut dosyasını yardımcı program içinden çalıştırırsanız sorun yoktur, ancak bir karşılaştırma yaptıktan sonra değişiklik komut dosyasını dışa aktarmaya / xcopy yapmaya karar verirseniz ve ardından ortaya çıkan değişiklik komut dosyasını SSMS'ye içe / yapıştırmayı denerseniz, yukarıdaki gibi başarısız olacaktır. Açıktır ki, eğer db değişim komut dosyasını paketlenmiş bir dağıtıma dahil ediyorsanız bu da bir sorun olabilir. Bu nedenle, komut dosyasını menü aracılığıyla çalıştırmadan önce SQL komut modunu açmanız veya özel kurulum komut dosyanızın çalışmadan önce bunu yaptığından emin olmanız gerekir.
rism

6
Visual Studio (2013): SQL
menüsü-

Bu problemle, kurulumdan sonra ilk başlangıçta uygulamamdan veritabanımı oluşturmak için oluşturulan scema karşılaştırma komut dosyasını kullanmaya çalışıyorum, komut dosyasını bir execenonquery () 'ye iletiyorum. Ya bunu SQLCMD modu aracılığıyla yürütmenin bir yolunu bulmalı ya da bir başlangıç ​​için tüm değişkenleri değiştiren komut dosyasını hacklemem gerekecek.
Scott

Sadece bir Bilginize - DB projemi yayınlayarak oluşturulan oluşturma komut dosyasını kullandım ve ardından setvar kullanılarak referans verilen değişkenlere yönelik tüm referansları kaldırdım. Veritabanı adımı sabit kodladım, böylece CREATE DATABASE [$ DatabaseName] yerine CREATE DATABASE MYDBNAME idi. Bu komut dosyası artık, kurulumdan sonra ilk uygulama başlatmam sırasında veritabanımı execenonquery () aracılığıyla oluşturmak için çalışıyor.
Scott

10

Aşağıdaki görüntüde açıklandığı gibi SQL Server Management Studio'da sqlcmd modunu etkinleştirmeniz yeterlidir.

görüntü açıklamasını buraya girin


2

SQL2012 İÇİN:

Tools / options / Query Execution'a gidin ve varsayılan olarak kontrol edin, SQLCMD modunda yeni sorgular açın.

Yeni Sorgu düğmesine basın ve değişken tanımlarının vurgulandığından emin olun, betiğiniz şimdi doğru şekilde çalışmalıdır.

Önceki sürümler:

http://blog.sqlauthority.com/2013/06/28/sql-server-how-to-set-variable-and-use-variable-in-sqlcmd-mode/


Visual Studio, şunu kullanan bir .sql dosyası açıldığında projenize ilişkin Sözdizimi Hatalarını da bildirir: setvar. Burada açıklanan Seçenekler değişikliği, hataları ortadan kaldıracak ve ifadedeki "kırmızı dalgalı alt çizgiyi" önleyecektir (etkisini görmek için açık .sql dosyalarını kapatıp yeniden açmanız gerekir).
BRebey

0

değiştirmeyi dene :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

ile:

USE [MesProduction_Preloaded_KLM_MesSap]
GO

Komut dosyasının geri kalanında değişkenin değerlendirilmesine yardımcı olmuyor mu? $ (VeritabanıAdı). [Dbo]. [Ne olursa olsun]
C
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.