发生文件激活错误。物理文件名'N @ filename

时间:2011-05-03 22:21:15

标签: sql sql-server tsql

下面的t-sql代码编译得很好。但当我像它一样运行它 exec [SP_ATTACH_NW] N'C:\ myfolder'我明白了

Msg 5105,Level 16,State 2,Procedure SP_ATTACH_NW,Line 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 个答案:

答案 0 :(得分:3)

CREATE DATABASE的文件名参数中不能包含变量(MSDN在语法中不显示@vars)

上面的代码实际上是在查找常量" N @ mdfFileName"作为文件名。

您需要动态SQL在@MyBuiltSQL中构建字符串,然后运行EXEC(@MyBuiltSQL)

注意:" N"这里的前缀不会使@mdfFileName nvarchar无论如何