Произошла ошибка активации файла. Физическое имя файла 'N @ filename - PullRequest
2 голосов
/ 04 мая 2011

Ниже код t-sql компилируется нормально.Но когда я запускаю его как exec [SP_ATTACH_NW] N'C: \ myfolder ', я получаю

Msg 5105, уровень 16, состояние 2, процедура SP_ATTACH_NW, строка 14 Произошла ошибка активации файла.Физическое имя файла 'N @ mdfFileName' может быть неправильным.Диагностируйте и исправьте дополнительные ошибки и повторите операцию.

USE master

GO

SET ANSI_NULLS ON

GO

CREATE PROCEDURE [dbo].[SP_ATTACH_NW] (
    @DestFolder varchar(255)
)

AS

BEGIN

    SET NOCOUNT ON;

    Declare @mdfFileName varchar(255)
    Declare @ldfFileName varchar(255)

    set @mdfFileName = @DestFolder + '\northwnd.mdf'
    set @ldfFileName = @DestFolder + '\northwnd.ldf'

CREATE DATABASE [Northwind] ON 

( FILENAME = N@mdfFileName ),

( FILENAME = N@ldfFileName )

 FOR ATTACH


END

Пожалуйста, сообщите.спасибо

1 Ответ

3 голосов
/ 04 мая 2011

Вы не можете иметь переменные в аргументах имени файла CREATE DATABASE (MSDN не показывает @vars в синтаксисе)

Приведенный выше код буквально ищет константу "N @ mdfFileName "в качестве имени файла.

Вам понадобится динамический SQL для построения строки, скажем, в @MyBuiltSQL, затем запустите EXEC(@MyBuiltSQL)

Примечание: здесь префикс" N "будетне делать @mdfFileName nvarchar в любом случае

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...