【问题标题】:Must declare the scalar variable bcp Error必须声明标量变量 bcp 错误
【发布时间】:2014-08-06 16:55:46
【问题描述】:
alter PROC XML
AS

DECLARE @myXml xml
Declare @SQL nvarchar(2000)

SET @myXml = 'SELECT TOP 1000 *  FROM [xyz].[dbo].[yzx] FOR XML AUTO'
SET @SQL= 'bcp "exec @myXml" QUERYOUT C:\sample.xml -w -r -t -S www -T' 
EXEC Master..xp_CmdShell @SQL

当我运行上面的代码时,我得到如下错误

SQLState = 37000, NativeError = 137
Error = [Microsoft][SQL Server Native Client 11.0][SQL Server]Must declare the scalar variable "@myXml".
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Unable to resolve column level collations

即使我已经声明了变量,为什么会出现上述错误

【问题讨论】:

    标签: sql sql-server stored-procedures bcp


    【解决方案1】:

    您正在使用动态 sql,您需要传递字符串值以执行,我认为您还需要将 xml 类型转换为 varchar,这可能会有所帮助:

    CREATE PROCEDURE dbo.Test1    
    AS
        SET NOCOUNT ON;
        SELECT TOP 1000 *  FROM [xyz].[dbo].[yzx] FOR XML AUTO
    GO
    
    CREATE PROC XML
    AS
    DECLARE @myXml xml
    Declare @SQL nvarchar(2000)
    
    SET @myXml = 'dbo.Test1'
    SET @SQL= 'bcp "exec ' + CAST(@myXml AS VARCHAR(max)) + '" QUERYOUT C:\sample.xml -w -r -t -S www -T' 
    EXEC Master..xp_CmdShell @SQL
    

    【讨论】:

    • 如果我执行你的代码,这些是我面临的错误复制方向必须是“输入”、“输出”或“格式”。用法:bcp {dbtable |查询} {在 |出|查询 |格式} 数据文件 [-m maxerrors] [-f 格式文件] [-e errfile] [-F firstrow] [-L lastrow] [-b batchsize] [-n 本机类型] [-c 字符类型] [-w 宽字符类型] [-N 保留非文本本机] [-V 文件格式版本] [-q 引用标识符] [-C 代码页说明符] [-t 字段终止符] [-r 行终止符] NULL
    • @user3088731 请看这个链接:stackoverflow.com/questions/22398282/…
    • 我认为您还需要使用存储过程来执行它。在上面编辑。
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多