Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建表在循环中失败(SQL Server)_Sql_Sql Server - Fatal编程技术网

创建表在循环中失败(SQL Server)

创建表在循环中失败(SQL Server),sql,sql-server,Sql,Sql Server,我有一个sql脚本,可以为sql server中的每个db创建表。但是,它在一个创建表脚本上失败。例如 CREATE TABLE [dbo].[Mx_Poll_Tags] 指挥部。这有什么问题?我看不出来 奇怪的是,当我在查询窗口中逐个运行脚本时,它们都工作得很好。只是这个特殊的过程失败了 错误状态为: 味精173,第15级,状态1,第71行 列“Unit”的定义必须包含数据类型 创建脚本是由SQL Server本身通过将现有的Mx\u Poll\u标记表编写为CreateTo来创建的 有人

我有一个sql脚本,可以为sql server中的每个db创建表。但是,它在一个创建表脚本上失败。例如

CREATE TABLE [dbo].[Mx_Poll_Tags] 
指挥部。这有什么问题?我看不出来

奇怪的是,当我在查询窗口中逐个运行脚本时,它们都工作得很好。只是这个特殊的过程失败了

错误状态为:

味精173,第15级,状态1,第71行
列“Unit”的定义必须包含数据类型

创建脚本是由SQL Server本身通过将现有的
Mx\u Poll\u标记
表编写为
CreateTo
来创建的

有人知道错误是什么吗

BEGIN
declare @proc nvarchar(max)
set @proc='if ''?'' like ''Client_%''

begin 
    use [?]
    print ''?''

    DROP TABLE [dbo].[ManualMetersInput]
    DROP TABLE [dbo].[ManualMeterActions]
    DROP TABLE [dbo].[ManualMeters]

        DROP TABLE [dbo].[MX_Poll]
    --DROP TABLE [dbo].[Mx_Poll_Tags]
    DROP TABLE [dbo].[MX_Poll_Info]
    DROP TABLE [dbo].[MX_Poll_Logs]
    DROP TABLE [dbo].[MX_Poll_QA]
    --DROP TABLE [dbo].[MX_Poll_Vars]

    CREATE TABLE [dbo].[ManualMeters]
    (
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Ean] [varchar](max) NULL,
        [Period] [int] NULL,       
        [TagTable] [varchar](max) NULL,
        [TagTableId] [varchar](max) NOT NULL,
        [Overflow] [int] NULL,
        [TZ] [varchar](max) NULL,
    ) ON [PRIMARY] 

    CREATE TABLE [dbo].[ManualMetersInput]
    (
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Timestamp] [datetime2](7) NOT NULL,
        [ManualMeterId] [int] NOT NULL,
        [Value] [decimal](18, 3) NOT NULL,
        [IsOverflow] [bit] NOT NULL,
        [ImportDate] [datetime2](7) NOT NULL,
    ) ON [PRIMARY] 

    CREATE TABLE [dbo].[ManualMeterActions]
    (
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [ManualMeterId] [int] NOT NULL,
        [UserId] [int] NOT NULL,
        [Type] [nvarchar](max) NOT NULL,
    ) ON [PRIMARY]

    CREATE TABLE [dbo].[MX_Poll]
    (
        [timestamp] [datetime2](7) NOT NULL,
        [localtimestamp] [datetime2](7) NOT NULL,
    ) ON [PRIMARY] 

    CREATE TABLE [dbo].[MX_Poll_Info]
    (
        [timestamp] [datetime2](7) NOT NULL,
        [info] [nvarchar](max) NOT NULL,
    ) ON [PRIMARY]

    CREATE TABLE [dbo].[MX_Poll_Logs]
    (
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [timestamp] [datetime2](7) NOT NULL,
        [Message] [nvarchar](max) NULL,
    ) ON [PRIMARY]

    CREATE TABLE [dbo].[MX_Poll_QA]
    (
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [timestamp] [datetime2](7) NOT NULL,
        [tag] [nvarchar](max) NULL,
        [QA] [int] NULL
    ) ON [PRIMARY] 

    -- error here    
    CREATE TABLE [dbo].[Mx_Poll_Tags]
    (
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Name] [nvarchar](800) NOT NULL,
        [Unit] [int] NOT NULL,
        [FieldName] [nvarchar](100) NULL,
        [ScaleFromMin] [decimal](18, 3) NULL,
        [ScaleFromMax] [decimal](18, 3) NULL,
        [ScaleToMin] [decimal](18, 3) NULL,
        [ScaleToMax] [decimal](18, 3) NULL,
        [DeltaOfKwhCounter_Id] [int] NULL,
        [Visible] [int] NULL,
        [Type] [nvarchar](50) NULL,
        [Enable] [int] NULL,
        [Content] [int] NULL,
        [Quantity] [int] NULL,
        [Signal] [int] NULL,
        [SignalDescription] [nvarchar](max) NULL,
        [Connection] [nvarchar](max) NULL,
        [Cable] [nvarchar](max) NULL,
        [Comments] [nvarchar](max) NULL,
        [UsedForPrediction_0] [bit] NOT NULL,
        [RelatedToPrediction_0] [bit] NOT NULL,
        [CalculatedByPredictionNo] [int] NULL,
    ) ON [PRIMARY] 

end';

--print @proc;
exec sp_MSForEachDB @proc

END
GO

你能试着创建那个表吗

还有,你能去掉“开始”和“结束”吗?基于此线程:

我没有足够的声誉来评论这件事

编辑:


默认情况下,sys.sp_MSforeachdb@command1的参数长度为nvarchar(2000)。即使您正在传递一个varchar(max),超过2000的任何内容都将被截断。

您可以尝试创建该表吗

还有,你能去掉“开始”和“结束”吗?基于此线程:

我没有足够的声誉来评论这件事

编辑:



默认情况下,sys.sp_MSforeachdb@command1的参数长度为nvarchar(2000)。即使您正在传递一个varchar(max),超过2000的任何内容都会被截断。

您的
drop table
语句被注释掉了,尽管我希望会出现不同的错误消息……是的,我注释掉了它,因为该表还不存在,否则drop会给出一个错误。因此,这与我问题中的错误无关..根据错误消息,我希望在缺少数据类型的地方会有这样一个
[Unit]NOT NULL,
文本行。您确定生成的错误消息不对应于某个查询,而该查询确实被取消/省略了吗?可能发生复制/过去错误或编辑查询之类的情况。您还可以查看
print@proc
的结果。我真的无法想象你在那里丢失了你的数据类型,但这是一个简单的测试。unit是一个关键字吗?在这种情况下,编译器会有不同的看法吗?Try units您的
drop table
语句被注释掉了,尽管我希望会出现不同的错误消息……是的,我注释掉了它,因为该表还不存在,否则drop会产生错误。因此,这与我问题中的错误无关..根据错误消息,我希望在缺少数据类型的地方会有这样一个
[Unit]NOT NULL,
文本行。您确定生成的错误消息不对应于某个查询,而该查询确实被取消/省略了吗?可能发生复制/过去错误或编辑查询之类的情况。您还可以查看
print@proc
的结果。我真的无法想象你在那里丢失了你的数据类型,但这是一个简单的测试。unit是一个关键字吗?在这种情况下,编译器会有不同的看法吗?试试也没用的单位。奇怪的是,当我在反查询窗口中直接复制create脚本时,它确实起作用了。只有当它在循环中时才不会。我将把它添加到我的问题描述中。我认为它可能是@proc变量的长度。您能否将进程减少到只包含表的exec sp_msforeach。我相信默认情况下,sp_msforeachdb有一个最大字符长度。您是对的,只是查询将在
CREATE TABLE[dbo].[MX_Poll\u QA]
语句中的某个地方被截断。所以错误出现在错误的语句中,似乎…当我将查询粘贴到word中时,它是2184个字符。在Mx_Poll_Tags Create Table语句中,第2000个字符位于注释之后。看来这个答案是正确的。@ArthurDaniels;你说得对。这就是问题所在。我已经把它拆开了,现在它可以正常工作了。经验教训:)这也没用。奇怪的是,当我在反查询窗口中直接复制create脚本时,它确实起作用了。只有当它在循环中时才不会。我将把它添加到我的问题描述中。我认为它可能是@proc变量的长度。您能否将进程减少到只包含表的exec sp_msforeach。我相信默认情况下,sp_msforeachdb有一个最大字符长度。您是对的,只是查询将在
CREATE TABLE[dbo].[MX_Poll\u QA]
语句中的某个地方被截断。所以错误出现在错误的语句中,似乎…当我将查询粘贴到word中时,它是2184个字符。在Mx_Poll_Tags Create Table语句中,第2000个字符位于注释之后。看来这个答案是正确的。@ArthurDaniels;你说得对。这就是问题所在。我已经把它拆开了,现在它可以正常工作了。经验教训:)